2014-03-02 96 views
2

我將(key,value)轉換爲PDO select搜索,但我發現了一個奇怪的行爲。在數組中循環返回不同的SQL結果,具體取決於代碼

這工作:

$statement = $this->handler->prepare("SELECT * FROM $table WHERE pid=:pid AND section=:section"); 
foreach ($data as $key => $value) 
    $statement->bindParam(":$key", $data[$key]); 

$statement->execute(); 
debug($statement->fetchAll(PDO::FETCH_ASSOC)); 

但是,當我改變函數內循環到這一點,它工作

foreach ($data as $key => $value) 
    $statement->bindParam(":$key", $value); 

即使$value == $data[$key]是真實的,他們第二個代碼犯規給予我返回正確的結果。爲什麼?

回答

4

它不工作的原因是因爲您將參數綁定到$value,該參數不斷變化。

如果你這樣做:

$value = 5; 
$statement->bindParam(":$key", $value); 
$value = 10; 

然後10將查詢發送。

相反,你需要做的是綁定值而不是參數:

foreach ($data as $key => $value) 
    $statement->bindValue(":$key", $value); 
+1

媽的,我是如此接近。我記得bindParam通過引用綁定,而不是價值,但我無法弄清楚需要說些什麼。 – Daedalus

+2

@達達魯斯你可能還毆打我幾個答案呢! :P – Mike

+0

你們都很棒 –

相關問題