PHP 中的PDO 準備語句:MySQL LIKE 查詢的問題
PHP 與MySQL 的PDO 類別提供了一個使用參數化查詢執行SQL 語句的機制,提升安全性和效能。但是,使用者在使用 LIKE 查詢時可能會遇到困難。
問題:PDO 準備語句未使用LIKE 查詢傳回結果
當嘗試執行類似以下內容的查詢時使用PDO:
SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"
使用者可能會發現沒有回傳結果。
解:正確參數化
問題出在搜尋字詞的參數化不正確。在 PHP 中,準備好的語句使用命名佔位符,這需要不同的語法。 LIKE 查詢的正確參數化是:
$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));
解釋:
準備好的語句將資料與查詢分開並使用佔位符。因此,不需要將搜尋詞用雙引號括起來或執行字串連接。
其他常見錯誤:
WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"')); // Incorrect
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm)); // Incorrect
透過使用正確的參數化,您可以使用以下命令成功執行 LIKE 查詢PDO 在 PHP 中準備了語句。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3