2011-04-15 52 views
3

我的頁面使用ajax數據發送到php腳本。腳本得到的一個變量是:$ product_disc 現在我在腳本中完成的一個小測試清楚地顯示$ product_disc爲null。測試:使用MySqli將NULL值插入MySql記錄

if ($product_disc == null) 
{$test="null";} 
else {$test="not null";} 

我讓我的代碼返回$測試的AJAX調用過程:

$return_array['success'] = array ('test' => $test); 

而使用Firebug我看到Ajax響應有: 「測試」: 「空」
所以,我的結論是$ product_disc是值:空現在

,我的劇本里我使用下面的代碼中插入數據MySQL數據庫:

$stmt = mysqli_prepare($link, "INSERT INTO set_products (id,discount) VALUES (NULL , ?)"); 
mysqli_stmt_bind_param($stmt, "i", $product_disc); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_close($stmt); 

查詢正在執行,但插入的值是0而不是NULL!
只有當我明確加入:$ product_disc = null;在MySqli語句之前,插入的值爲NULL。

這是爲什麼? null和null之間有什麼不同?我跟着這個answer在stackoverflow希望我可以很容易地插入NULL,但隨後出現這個問題...

謝謝!

PS @stackoverflow team - 您的拼寫檢查字典無法識別單詞stackoverflow!

+2

您準備product_disc爲整數,null不是整數。它被轉換爲0 – Khez 2011-04-15 13:15:20

+0

哦..改變我解決它:)爲什麼不把它作爲一個答案? – Israel 2011-04-15 13:22:55

+0

@Israel:spellchecker在您的瀏覽器中,lol) – zerkms 2011-04-15 13:25:10

回答

4

您將product_disc設置爲整數,null不是整數。它被轉換爲0.

準備作爲一個字符串時,肯定會解決您的問題,它會破壞準備mysql語句的目的。考慮這個解決方案:

mysqli_stmt_bind_param($stmt, $product_disc==null?'s':'i', $product_disc); 
+0

謝謝Khez,我會用你的建議,但是你知道爲什麼當我顯式聲明var爲NULL時,它的行爲有所不同嗎?在這兩種方式var是一個空值,但一種方式它被轉換爲整數,而另一種方式它不是 – Israel 2011-04-15 13:44:26

+0

就像我在你的OP問,你可以提供代碼?我確信有一個實際的原因 – Khez 2011-04-15 13:45:55