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 サイトの他の関連記事を参照してください。