3

我在 MYSQL 中遇到了一个非常令人烦恼的怪癖。

我正在使用 sql 语句更新现有记录。所有更新都可以正常工作,除非它到达邮政编码,如果邮政编码的值为空,它会插入一个 0。如果该字段确实有一个值,它会毫无问题地插入正确的值。

zip 字段的数据类型是 int(11)。

这是查询中的sql语句:

$sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode='$zipcode', emailadr='$emailadr' WHERE memberid= '$memberid'";

如果邮政编码为空,则在更新之前回显该内容时,它会显示zipcode = '',

MYSQL 插入 0 以响应某事或其他事。

我尝试删除 zip 值周围的撇号,但 MYSQL 抛出了一个错误,所以这不是修复。

有没有人遇到过这个问题,或者你能提出一个解决方案吗?

感谢您的任何建议。

4

3 回答 3

7
$sql= "UPDATE memberinfo SET firstname = '$firstname', lastname = '$lastname', zipcode=" . (!$zipcode ? 'NULL' : (int)$zipcode) . ", emailadr='$emailadr' WHERE memberid= '$memberid'";

在这种情况下 - 如果$zipcode为空(空字符串或 0) -NULL将被插入,否则将插入实际值

PS:确保您的zipcode字段可以为空

PPS:现在你得到了0,因为 mysql 将空字符串转换为整数,那就是 0

于 2012-07-18T21:40:36.677 回答
1

是的,当插入 INT 字段时,空字符串将被视为 0。如果您真正使用 INT 并希望插入默认字段值(或者如果字段设置允许,则插入 NULL 值),那么您不应在邮政编码值周围加上单引号,而是将查询逻辑更改为插入值 zipcode=NULL 或完全从插入中排除该文件。

于 2012-07-18T21:42:09.890 回答
0

This is old but I was struggling with this issue using bind_para statements and did want to change int to varchar in mysql. So I wrote a little helper function that converted the empty string to null. I go the idea when I was researching a similar problem sending empty strings to date variables This is the simple function that is called from the array that is used to set up the bind parameters

function nullEmptyInt($inputVal){
    if($inputVal == '' || empty($inputVal)){
        return null;
    }else{
        return (int)($inputVal);
    }
}
于 2015-02-15T22:51:36.423 回答