2010-07-30 37 views
2

我正在使用simplexml_load_file()將XML feed分析到MYSQL表中。有些變量是空白的,我希望它們是實際的NULL而不是NULL,還是有差別?如何正確設置一個空變量爲NULL

$xml = simplexml_load_file('cb.xml') or die ('Bad XML File'); 
foreach($xml->item as $item) { 
    $name = $item->name; 

//Tried 

if ($name == '') { 
    $name = 'NULL'; 
} 

//And 

if ($name == '') { 
    $name = NULL; 
} 

mysql_query("INSERT INTO cb (name) VALUES ('$name')"); 
+1

第二個偶爾會在ORACLE上工作。 – pascal 2010-07-30 05:21:08

回答

5

這是因爲你給MySQL的字符串:

.... ('ANYTHING WITHIN QUOTES IS A STRING') 

當「鑄造」爲一個字符串時,值爲PHP的值變爲空字符串。所以你的第一次嘗試給了... ('NULL'),現在它給了... ('')

您必須在查詢中使用NULL關鍵字(不帶引號)將NULL插入到數據庫字段中。

mysql_query("INSERT INTO cb (name) VALUES (" . ($name == null ? "NULL" : "'$name'") . ")"); 

哦,和往常一樣,注意不要讓你的無保護$name變量SQL注入。

+0

我得到了它的工作,我只是有麻煩使用該語法與多個VALUES變量。 – ZaneDeFazio 2010-07-30 05:42:09

2

第二個變量的初始化是正確的;第一個只是字符串'NULL'(從PHP的角度來看並不特別)。但是,你應該使用預處理語句(MySQLi_STMTPDOStatement如果你想堅持使用常規MySQL擴展,使用mysql_real_escape_string

與PDO的一個例子是:

$stmt = $pdo_con->prepare("INSERT INTO cb (name) VALUES (?);"); 
$stmt->execute(array($name)); 

這將正確處理空值,不像。您的當前字符串插值

+0

你能舉一個準備好的陳述的例子嗎?因爲當我使用NULL而不是'NULL'時,MYSQL仍然顯示一個空白字段。 – ZaneDeFazio 2010-07-30 05:19:25

+0

這是[我給出解釋準備語句的前一個答案](http://stackoverflow.com/questions/3340533/filtering-out-mysql-query-in-php/3340616#3340616)。瞭解他們,使用他們,愛他們。 – Charles 2010-07-30 05:26:45

0

如果你正在使用多個值和速​​記,如果其他工作,然後做到這一點:(我們將在第3列插入空數據)*請注意,單引號被省略..這是因爲「NULL」不能作爲sql的字符串輸入,否則它將是一個字符串NULL,而不是SQL NULL,這是我們想要的。

//condition 
if ($col3_var !== NULL) 
    $col3_var = "'$col3_var'"; 
else 
    $col3_var = "NULL"; //SQL will omit the "" here 

$sql = "INSERT INTO tablename 
     (col1, col2, col3...) 
     VALUES 
     ('$col1_var', '$col2_var', $col3_var)"; 

$result = mysql_query($sql) or die("Err: " . mysql_error());