ホームページ >バックエンド開発 >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 Prepared Statement: MySQL LIKE クエリの問題

MySQL を使用した PHP の 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>
  • このアプローチは次のとおりです。不必要な double が追加されるため、不正確です引用符。
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect</code>
  • パラメータ化には、CONCAT を使用してクエリ内の検索語をラップする必要はありません。

正しいパラメータ化を使用すると、次のことが可能になります。 PHP で PDO プリペアド ステートメントを使用して LIKE クエリを正常に実行します。

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

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