PHP 中的PDO 準備語句:MySQL LIKE 查詢的問題
PHP 與MySQLSQL 的PDO 類別提供了一個使用參數化查詢執行SQL 語句的機制,提升安全性和效能。但是,使用者在使用 LIKE 查詢時可能會遇到困難。
問題:PDO 準備語句未使用LIKE 查詢傳回結果
嘗試執行類似下列內容的查詢時使用PDO:
<code class="mysql">SELECT * FROM hs WHERE hs_text LIKE "%searchTerm%"</code>
使用者可能會發現沒有傳回結果。
解:正確的參數化
問題在於參數化不正確搜尋字詞的。在 PHP 中,準備好的語句使用命名佔位符,這需要不同的語法。 LIKE 查詢的正確參數化是:
<code class="php">$prep = $dbh->prepare($sql); $ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>
解釋:
準備好的語句將資料與查詢分開並使用佔位符。因此,不需要將搜尋詞用雙引號括起來或執行字串連接。
其他常見錯誤:
<code class="php">WHERE hs_text LIKE :searchTerm $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect</code>
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\') $ret = $prep->execute(array($searchTerm)); // Incorrect</code>
透過使用正確的參數化,您可以在 PHP 中使用 PDO 準備語句成功執行 LIKE 查詢。
以上是為什麼PDO準備語句無法透過LIKE查詢傳回結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!