2013-04-12 133 views
1

假設$search是來自用戶輸入的字符串,並且$db是有效的PDO引用。PHP PDO MySQL LIKE和預準備語句

從我個人理解,下面塊是優選的,應該工作:

$imageStatement = $db->prepare("SELECT 
images.whatever 
FROM images 
WHERE images.title LIKE :titleSearch OR images.description LIKE :descriptionSearch"); 
$imageStatement->bindValue(':titleSearch', "%{$search}%"); 
$imageStatement->bindValue(':descriptionSearch', "%{$search}%"); 
$images = $imageStatement->fetchAll(); 

它還給0的結果,而下面還給預期收益:

$search = $db->quote("%{$search}%"); 
$images = $db->query("SELECT 
images.whatever 
FROM images 
WHERE images.title LIKE {$search} OR images.description LIKE {$search}")->fetchAll(); 

我是什麼做錯了?

回答

7

您從未執行過您的PDO語句。綁定參數後,請在檢索結果之前調用execute

$imageStatement->bindValue(':titleSearch', "%{$search}%"); 
$imageStatement->bindValue(':descriptionSearch', "%{$search}%"); 
$imageStatement->execute(); //ADD THIS STATEMENT 
$images = $imageStatement->fetchAll(); 

PDO的query功能並不需要向execute,因爲它不是一個參數化查詢。

+0

yikes - 我是一個白癡 - 只是忘了執行 - 我會盡快接受(6分鐘)。謝謝 – momo

+0

@BigMoMo沒問題。我們都犯這些錯誤。 – Kyle