1

可能重复:
将 NULL 变量插入数据库

我有一个包含列的表(日志):

秒:bigint(20) UNSIGNED NULL

IP地址:varchar(15) NULL

问题是,每当变量被赋予值 NULL 时,它们作为 IPAddress 列的空字符串和 Seconds 列的 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。在我的情况下,它取决于POST数据。

任何帮助都深表感谢。谢谢。

4

2 回答 2

3
"" !== NULL
"NULL" !== NULL
NULL === NULL

您正在插入""

于 2012-11-13T18:25:07.740 回答
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 和预准备语句来抽象出这些类型的任务会更好。

于 2012-11-13T18:31:54.777 回答