我在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抛出错误,这不是一个修复。
有没有人遇到这个或你能建议一个解决方案吗?
感谢您的任何建议。
答案 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);
}
}