2012-11-12 38 views
7

我一直在轉換應用程序以使用PDO準備語句而不是mysqli,並且遇到了一個奇怪的問題。我在數據庫中有一些記錄,預計字段將爲空。不是'null'(字符串)或''(空字符串),但是是NULL。我建立我的動態查詢,所以在過去,當我在一個物體在null變量來了,我想建立這樣的查詢:使用PHP PDO準備的語句和MySQL選擇字段爲空的行

WHERE fieldName is null; 

當現場爲null會得到預期的結果。

現在PDO,我的查詢沒有返回任何結果,我沒有得到任何錯誤。它只是沒有返回我期望的記錄。當我回應構建的查詢並在MySQL中直接運行它們時,我得到了預期的結果,但在應用程序中沒有返回結果。

一些我試過的東西包括像這樣的建築查詢:

WHERE fieldName is null; 

WHERE fieldName <=> null; 

我也嘗試過的標準編制聲明:

WHERE fieldName = :fieldName 

然後綁定這些種語句:

$stmt->bindParam(":$field", $value); 
$stmt->bindParam(":$field", $value, PDO::PARAM_NULL); 
$stmt->bindParam(":$field", null, PDO::PARAM_NULL); 
$stmt->bindValue(":$field", null, PDO::PARAM_NULL); 
$stmt->bindValue(":$field", null, PDO::PARAM_INT); 

任何幫助,這將不勝感激。我的PHP版本是5.3.10,MySQL是5.5.22。作爲一個側面的問題,我仍然不清楚bindParam和bindValue之間的區別,所以如果它包含在你的答案中是有意義的,我將非常感謝關於這個問題的一些澄清...

+0

不同的問題,但所有的awnsers都在這裏:http://stackoverflow.com/questions/1391777/how-do-i-insert-null-values-using-pdo –

+0

我試過所有不同的建議這個問題,目前還沒有工作...... – cdwhatcott

+0

如果你插入或搜索null,你爲什麼需要參數化? –

回答

3

原來一直的一些答覆這個問題的一個組合:How do I insert NULL values using PDO?(約翰指出)

我需要我的where子句更改爲這樣:

WHERE fieldName is :fieldName; 

再經過字段=>值的陣列,以執行功能:

$binds = array(); 
foreach ($wheres as $where) { 
    $field = $where['field']; 
    $value = $where['value']; 
    $binds[":$field"] = $value; 
} 
$stmt->execute($binds); 

查詢根本無法使用bindValue,即使更改了我的where子句。有誰知道爲什麼綁定不起作用,但這種其他方法呢?

+2

雖然我很難找到明確的證據,但我並不認爲可以在PDO語句中爲「IS」條件使用佔位符。在測試中,即使使用您提供的確切代碼,我也無法獲得「WHERE fieldName is:fieldName」的效果。如果我使用'IS'以外的東西,比如'='或'>',我可以讓代碼正常工作。你能詳細說明你使用的代碼,還是有其他建議?儘管如此,我仍然堅持使用MySQL版本5.1,以便可以解釋爲什麼它不適用於我(我看到您使用的是5.5)。 –

1

不同的問題,但所有的awnsers在這裏:How do I insert NULL values using PDO?

概括起來:

$stmt->bindValue(':param', null, PDO::PARAM_INT); 

應該work.You也可以使用:

$stmt->execute(array(":param" => NULL)); 

對於bindp亞蘭你必須在一個變量(不是常數)給出了值,bindvalue你可以使用常數等。

-1

在MySQL中,你可以使用查詢

select * from atable where isnull(column_name); 

檢查null值。