mysql / PHP:更新空int字段插入值0

时间:2012-07-18 21:37:39

标签: mysql integer

我在MYSQL中遇到了一个被证明非常烦恼的怪癖。

我正在使用sql语句更新现有记录。所有更新工作正常,除非它获得邮政编码,如果zip的值为空,则插入0.如果该字段确实有值,则插入正确的值而没有任何问题。

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

这是查询中的sql语句:

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

当你在更新之前回复它时,如果zipcode为空,则会显示zipcode = '',

MYSQL会插入0以响应某些事情。

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

有没有人遇到这个或你能建议一个解决方案吗?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:5)

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

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

PS:确保您的zipcode字段为NULLable

PPS:现在你得到0,因为mysql将空字符串转换为整数并且为0

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这已经过时但是我使用bind_para语句在这个问题上苦苦挣扎,并且想要在mysql中将int更改为varchar。所以我写了一个小的帮助函数,将空字符串转换为null。当我研究将空字符串发送到日期变量的类似问题时,我就是这个想法 这是从用于设置绑定参数

的数组调用的简单函数
function nullEmptyInt($inputVal){
    if($inputVal == '' || empty($inputVal)){
        return null;
    }else{
        return (int)($inputVal);
    }
}