2012-11-13 42 views
1

可能重复:
Insert NULL variable into database如何插入一个值或NULL?

我有一个表(记录)使用列:

秒:BIGINT(20)UNSIGNED NULL

ip地址:VARCHAR( 15)NULL

pro瑕疵是,只要变量的值为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); 

我已经找遍了谷歌,但所有的答案假设我已经知道变量$秒$ IP是否要空,也可以不是。在我看来,这取决于POST数据。

任何帮助深表谢意。 谢谢。

+0

使用占位符。他们会照顾'NULL'的处理..并照顾SQL注入*而不需要手动调用某个丑陋的外观函数。 (问题是''​​'',一个字符串,而不是'NULL'被用作插入的值。) – 2012-11-13 18:24:04

+0

因为它们是字符串,当你得到它们,并且因此你对待它们(mysql_real_escape_STRING) –

+0

你的PHP将字符串定义为NULL,这与mysql NULL不同。在你的查询中,你应该检查(IE if语句)以查看变量是否为NULL,如果是,那么它应该看起来像这样:VALUES(NULL,'“。$ ipaddress。'')不带引号。 –

回答

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

要插入""

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.")", ...); 

然而,使用某种数据库库或预先准备好的报表,将这些类型的任务抽象出来,从长远来看会更好。