」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼PDO準備語句無法透過LIKE查詢傳回結果?

為什麼PDO準備語句無法透過LIKE查詢傳回結果?

發佈於2024-11-03
瀏覽:145

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

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
  • 參數化不需要使用 CONCAT 將搜尋字包裝在查詢中。

透過使用正確的參數化,您可以使用以下命令成功執行 LIKE 查詢PDO 在 PHP 中準備了語句。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3