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>
<code class="php">WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\') $ret = $prep->execute(array($searchTerm)); // Incorrect</code>
正しいパラメータ化を使用すると、次のことが可能になります。 PHP で PDO プリペアド ステートメントを使用して LIKE クエリを正常に実行します。
以上がPDO プリペアド ステートメントが LIKE クエリで結果を返せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。