ホームページ >データベース >mysql チュートリアル >PDO プリペアド ステートメントでワイルドカードを安全に使用できますか?
PDO プリペアド ステートメントでのワイルドカードの使用
データベース プログラミングの領域では、多くの場合、ワイルドカード文字を含むクエリを実行する必要があります。 % 記号などのワイルドカードを使用すると、検索条件の値の範囲と一致させることができます。この文脈では、PDO プリペアド ステートメントと組み合わせてワイルドカードを利用できるかどうかという疑問が生じます。
まず、最初の問い合わせで言及されたクエリをもう一度見てみましょう:
SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%'
このクエリは、名前フィールドに部分文字列「anyname」が含まれる gc_users テーブルからすべてのレコードを取得することを目的としています。 PDO プリペアド ステートメントを使用してこのようなクエリを実行する 1 つのアプローチは、ワイルドカード文字をパラメータに直接バインドすることです。ただし、この方法では SQL インジェクションの脆弱性が生じる可能性があります。
より安全な方法は、ワイルドカード文字を文字列値としてパラメータにバインドすることです。これは、プリペアドステートメントにバインドする前に、パラメータ変数にワイルドカード文字を前後に追加することで実現できます。例:
$name = "%anyname%"; $query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $query->bindParam(':name', $name); $query->execute();
または、bindValue() を使用してパラメータを値としてバインドすることもできます:
$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); $stmt->bindValue(':name', '%' . $name . '%'); $stmt->execute();
これらのガイドラインに従うことで、準備された PDO でワイルドカードを効果的に活用できます。データベース アプリケーションの整合性とセキュリティを維持しながら、ステートメントを削除できます。
以上がPDO プリペアド ステートメントでワイルドカードを安全に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。