2012-11-13 38 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.")", ...); 

然而,使用某種數據庫庫或預先準備好的報表,將這些類型的任務抽象出來,從長遠來看會更好。