使用PHP 的PDO 類別(MySQL 驅動程式)時,使用準備語句執行My LIKE 查詢可以是 LIKE 查詢一項令人困惑的任務。看似簡單的語法通常無法產生所需的結果。
考慮以下使用MySQL 用戶端無縫擷取資料的查詢:
SELECT ... FROM hs ... WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;
難題
但是,將此查詢移植到PHP 後,您可能會遇到無法返回任何結果的挫折感,無論您使用哪種語法試圖。下面的程式碼示範了此問題:
$sql = 'SELECT ... FROM hs ... WHERE hs.hs_text LIKE :searchTerm LIMIT 25'; $prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));
嘗試將搜尋字詞提供為CONCAT('%', ?, '%')、"%:searchTerm%" 或":searchTerm",而相應地修改執行行,證明是徒勞的。
解
解決這個難題的關鍵在於理解準備好的語句如何處理資料。它們與查詢分開傳送數據,從而在嵌入值時無需引號。
因此,正確的解決方案是:
$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
透過從搜尋字詞參數中刪除封閉的雙引號,您現在可以利用準備好的語句的力量,讓您成功執行LIKE 查詢。
以上是為什麼我的 PHP PDO 準備語句不能與 MySQL LIKE 查詢一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!