2014-03-28 26 views
0

我只是想知道,有沒有什麼辦法來選擇使用PDO bindValue不在數組中的數據。 我的主要目的是防止SQL注入。SELECT不檢索數據使用PDO bindValue

我的查詢是這樣的:

$array_name = array('George', 'Bob', 'Stephanie', 'Erica'); 

$query = $PDO -> prepare("SELECT id FROM table WHERE name NOT IN (:array_name)") 
$query->bindValue(':array_name', implode(",",$array_name), PDO::PARAM_STR); 

我試過上面的代碼,但它無法正常工作。

+0

你可以寫錯誤信息或日誌嗎? – Anri

+0

它沒有顯示任何錯誤。但它也沒有返回任何數據。 – Bono

+0

嘗試var_dump($查詢) – Anri

回答

1

PDO不支持綁定就像一個數組,但你可以做什麼是動態創建的字符串中的佔位符:

$placeholderStr = str_repeat('?, ', count($array_name)-1) . '?'; 
$query = $PDO -> prepare("SELECT id FROM table WHERE name NOT IN ($placeholderStr)"); 
$query->execute($array_name); 

另外,您可以使用具有此功能內置在庫中,這樣的如Doctrine2 DBAL

+0

這是SQL注入安全嗎? – Bono

+0

是的,您可以獲得準備好的聲明的所有好處,就像您對佔位符進行硬編碼一樣。數組的內容不會進入SQL本身,只有佔位符。 – MrCode

+0

我更喜歡使用'join(',',array_fill(1,count($ array_name),'?'))''因爲越少錯誤的機會越少,並且您不必處理最後一個元素不同。 –