我只是想设置一些值=“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);
答案 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)
empty()
功能文档:以下内容被认为是空的:
“”(空字符串)
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。