mysql
  • integer
  • 2012-07-18 79 views 2 likes 
    2

    我已经遇到了MYSQL中的一个奇怪事情,这证明是非常令人费解的。mysql/PHP:更新空int字段插入值0

    我正在使用sql语句更新现有记录。所有的更新工作正常,除非当它到达邮政编码,如果zip的值是空的,它会插入一个0.如果该字段确实有一个值,它插入正确的值没有任何问题。

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

    这里是查询SQL语句:

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

    当您在更新,如果邮政编码为空之前呼应了这一点,它显示zipcode = '',

    的0过得去MYSQL响应的东西或其他插入。

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

    有没有人跑过这个或者你能提出一个解决方案?

    感谢您的任何建议。

    +1

    它进入一个零因为你将类型设置为int。为了解决这个问题,将类型更改为varchar,并允许它为空 – 2012-07-18 21:40:33

    +0

    该字段在更新之前为空。因为记录最初创建时未指定zipcode值。是否习惯使zipcodes varchar字段? – user1260310 2012-07-18 21:42:36

    +1

    我使zipcode字段varchar,因为有些人添加破折号或字母到他们的zip。并与int,它不会工作。如果你想要它是int,但是是一个空值。不更新邮编='',只是离开了。 – 2012-07-18 21:43:54

    回答

    5
    $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

    +0

    这是一个很好的答案。不过,我想我会改变为varchar,因为Johnny上面提到的原因。英国和日本也有字母拉链。 – user1260310 2012-07-18 21:57:44

    +0

    这不起作用,因为它想要保存文字字符串“NULL”,而不是空值。如果您删除邮政编码值的引号,它将起作用。 – TRiG 2015-06-08 10:47:29

    +0

    @TRiG单引号字符是字符串文字的PHP语法的必需部分。请再次检查,一切正常:-)如果您不相信我 - 只需运行语句并在之后检查$ sql变量内容。 – zerkms 2015-06-08 10:54:50

    1

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

    0

    这是旧的,但我正在使用bind_para语句来解决这个问题,并且想在mysql中将int更改为varchar。所以我写了一个小帮助函数,将空字符串转换为null。我去的想法时,我研究过类似的问题发送空字符串,日期变量 这是简单的函数,是从被用于设置绑定的阵列称为参数

    function nullEmptyInt($inputVal){ 
        if($inputVal == '' || empty($inputVal)){ 
         return null; 
        }else{ 
         return (int)($inputVal); 
        } 
    } 
    
    相关问题