我有一个带有列的表(日志):
秒:bigint(20)UNSIGNED NULL
IPAddress:varchar(15)NULL
问题在于,只要变量的值为NULL,它们就会作为IPAddress列的空字符串插入列中,而作为Seconds列的0插入,而不是 NULL 。 / p>
//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。在我的情况下,它取决于 POST 数据。
非常感谢任何帮助。 感谢。
答案 0 :(得分:3)
"" !== NULL
"NULL" !== NULL
NULL === NULL
您正在插入""
答案 1 :(得分:1)
目前,您将变量组合为字符串,变量中的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可以更好地抽象出这些类型的任务。