如何插入值或NULL?

时间:2012-11-13 18:23:03

标签: php sql insert null

  

可能重复:
  Insert NULL variable into database

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

秒: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 数据。

非常感谢任何帮助。 感谢。

2 个答案:

答案 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可以更好地抽象出这些类型的任务。