可能的重复项:
将 NULL 变量插入数据库
我有一个带有列的表(日志):
秒数: 比金特(20) 无符号空
地址: 瓦尔查尔(15) 空
问题是,每当变量被赋予值 NULL 时,它们都会作为 IPAddress 列的空字符串插入到列中,作为秒列的空字符串插入 0,而不是 NULL。
//PHP 5.3.9//
if(isset($_POST['sec']))
$seconds = mysql_real_escape_string($_POST['sec']);
else
$seconds = NULL;
if(isset($_POST['ip']))
$ipaddress = mysql_real_escape_string($_POST['ip']);
else
$ipaddress = NULL;
$query = mysql_query("INSERT INTO log (Seconds, IPAddress) VALUES('".$seconds."', '".$ipaddress."')", $DbConnectionMyDb);
我已经在谷歌上搜索了所有内容,但所有的答案都假设我已经知道变量$sec和$ip是否会为空。就我而言,这取决于开机自检数据。
任何帮助都深表感谢。谢谢。
"" !== NULL
"NULL" !== NULL
NULL === NULL
您正在插入""
在将变量组合到字符串的那一刻,变量中的 NULL 值将强制转换为空字符串。您需要构造它实际读取的查询:
VALUES (NULL, NULL)
而不是
VALUES ("", "")
你可以通过以下方式做到这一点:
if (is_null($seconds)) $seconds='NULL'; else $seconds='"'.$seconds.'"';
if (is_null($ipaddress)) $ipaddress='NULL'; else $ipaddress='"'.$ipaddress.'"';
$query = mysql_query("... VALUES(".$seconds.", ".$ipaddress.")", ...);
但是,从长远来看,将某种数据库库或PDO与预准备语句一起使用,从而抽象出这些类型的任务会更好。