PHP - MySQL试图设置value =“0” - 它是NULL

时间:2013-12-31 09:27:54

标签: php mysql

我只是想设置一些值=“0”,但它会自动转换为NULL。

$result_checkups = mysql_query("INSERT INTO TABLE1 (COL1, COL2) VALUES (".(!empty($COL1) ? "'$COL1'" : "NULL").", ".(!empty($COL2) ? "'$COL2'" : "NULL").") or die(mysql_error());

这是我的代码 - 它看起来很奇怪,因为我需要设置NULL,当有人试图设置空字符串(“”)时。 但是现在,当COL2="0"时,那么NULL落后于MySQL(要清除,当COL2="1"时,它比MySQL落后“1”。 哪里有问题?

MySQL表:

CREATE TABLE `TABLE1` (
  `COL1` TIMESTAMP NULL DEFAULT NOW(),
  `COL2` TINYINT(1) NULL);

2 个答案:

答案 0 :(得分:6)

因为

php -r 'echo empty(0);'
1
php -r 'echo empty("0");'
1

0为空。尝试将您的陈述更改为:

$result_checkups = mysql_query("INSERT INTO TABLE1 (COL1, COL2) VALUES (".(($COL1==='') ?  "NULL" : "'$COL1'").", ".(($COL2==='') ? "NULL" : "'$COL2'").")") or die(mysql_error());

答案 1 :(得分:3)

  1. 使用转义功能清理数据以阻止sql-injection;
  2. 在插入查询之前预先定义数据 - 它更清晰,更易读。
  3. 阅读empty()功能文档:
  4.   

    以下内容被认为是空的:

         

    “”(空字符串)

         

    0(0为整数)

         

    0.0(0作为浮点数)

         

    “0”(0作为字符串)

         

    NULL

         

    错误

         

    array()(一个空数组)

         

    $变种; (声明的变量,但没有值)

    所以"0"被认为是空的。我建议你改用strlen()

    试试这个:

    $COL1 = mysql_real_escape_string($COL1);
    $COL2 = mysql_real_escape_string($COL2);
    
    $COL1 = strlen($COL1) ? $COL1 : 'NULL';
    $COL2 = strlen($COL2) ? $COL2 : 'NULL';
    
    $sql  = "INSERT INTO TABLE1 (COL1, COL2) VALUES ({$COL1}, {$COL2})";
    
    $result_checkups = mysql_query($sql) or die(mysql_error());
    

    P.S。:不推荐使用MySQL扩展程序。请改用MySQLi或PDO。请遵循此link