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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 19:11:30346ブラウズ

Why Am I Getting Null Results When Using PHP PDO Prepared Statements with MySQL LIKE Queries?

PHP PDO Prepared Statement MySQL LIKE クエリ: Null 結果の解決

MySQL では、一般的な操作には、LIKE 句を使用してデータをクエリして実行することが含まれます。ワイルドカード検索。 MySQL で PHP の PDO クラスを使用する場合、null 結果を回避するためにこれらのクエリを正しく作成する方法を理解することが重要です。

LIKE クエリが PDO クラスを通じて結果を返さないシナリオを調べてみましょう。 MySQL クライアントの元のクエリは次のとおりです。

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

このクエリは LIKE 演算子を利用して、hs.hs_text カラムの値内に searchTerm が含まれるすべての行を検索します。ただし、このクエリが PHP の PDO クラスに変換されると、結果が返されません。

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

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

PHP コードの問題は、WHERE 句の searchTerm の前後に二重引用符が存在することです。 PHP のプリペアド ステートメントでは、値をバインドするときに引用符は必要ありません。引用符は、文字列値がクエリ自体に直接埋め込まれている場合にのみ必要です。

問題を解決するには、searchTerm パラメーターから二重引用符を削除するだけです。

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

この変更により、PDO が許可されます。

準備されたステートメントは、クエリからデータを分離することにより、セキュリティと効率を向上させます。これらは、データベースがバインド プロセスを処理できるようにすることで、SQL インジェクションの脆弱性を防止し、クエリの実行を最適化します。 MySQL データベースから効果的にデータを取得するには、PHP の PDO クラスで LIKE クエリを正しく使用する方法を理解することが不可欠です。

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

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