ホームページ  >  記事  >  バックエンド開発  >  MySQL LIKE クエリを使用した PHP PDO プリペアド ステートメントが結果を返さないのはなぜですか?

MySQL LIKE クエリを使用した PHP PDO プリペアド ステートメントが結果を返さないのはなぜですか?

DDD
DDDオリジナル
2024-10-31 10:41:02952ブラウズ

Why does my PHP PDO prepared statement with MySQL LIKE query return no results?

PHP PDO 準備済みステートメント - MySQL LIKE クエリ

問題:
を使用して MySQL LIKE クエリを実行する場合PHP の PDO、検索では結果が返されません。

クエリ:

<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>

PHP コード:

<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';

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));</code>

解決策:
間違いは、execute() メソッドの :searchTerm パラメータに割り当てられた値にあります。準備されたステートメントを使用する場合、二重引用符は必要ありません。

修正された PHP コード:

<code class="php">$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));</code>

説明:
準備されたステートメントはデータを処理します。クエリとは別に。文字列の置換は実行されません。引用符は、値をクエリに直接埋め込む場合にのみ追加されます。

以上がMySQL LIKE クエリを使用した PHP PDO プリペアド ステートメントが結果を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。