首頁 >後端開發 >php教程 >為什麼PDO準備語句無法透過LIKE查詢傳回結果?

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

DDD
DDD原創
2024-11-01 12:50:29546瀏覽

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

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

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

以上是為什麼PDO準備語句無法透過LIKE查詢傳回結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn