PHP PDO 準備語句MySQL LIKE 查詢:解決空結果
在MySQL 中,常見的操作涉及使用LIKE 子句來執行資料通配符搜尋。在 MySQL 中使用 PHP 的 PDO 類別時,必須了解如何正確建構這些查詢以避免空結果。
讓我們檢查一下 LIKE 查詢不會透過 PDO 類別傳回結果的場景。 MySQL 用戶端中的原始查詢是:
<code class="sql">SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE "%searchTerm%" LIMIT 25;</code>
此查詢利用 LIKE 運算子來尋找 hs.hs_text 欄位在其值中包含 searchTerm 的所有行。但是,當此查詢轉換為 PHP 的 PDO 類別時,它無法傳回任何結果。
<code class="php">$sql = 'SELECT hs.hs_pk, hs.hs_text, hs.hs_did, hd.hd_did, hd.hd_text, hv.hv_text, hc.hc_text FROM hs LEFT JOIN hd ON hs.hs_did = hd.hd_did LEFT JOIN hd ON hd.hd_vid = hv.hv_id LEFT JOIN hc ON hd.hd_pclass = hc.hc_id WHERE hs.hs_text LIKE :searchTerm LIMIT 25'; $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>
PHP 程式碼中的問題是 WHERE 子句中的 searchTerm 周圍存在雙引號。 PHP 中的準備語句在綁定值時不需要引號。只有當字串值直接嵌入查詢本身時才需要引號。
要解決此問題,只需從searchTerm 參數中刪除雙引號即可:
<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
此修改允許PDO類將searchTerm 值正確綁定到查詢,這將產生預期的結果。
準備好的語句透過將資料與查詢分離來提高安全性和效率。它們透過允許資料庫處理綁定過程來防止 SQL 注入漏洞並優化查詢執行。了解如何透過 PHP 的 PDO 類別正確使用 LIKE 查詢對於從 MySQL 資料庫中有效檢索資料至關重要。
以上是為什麼在使用 PHP PDO 準備語句和 MySQL LIKE 查詢時得到空結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!