準備されたステートメントでバインドされたパラメーターを複数回再利用するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-26 05:50:10
オリジナル
915 人が閲覧しました

How Can I Reuse Bound Parameters Multiple Times in a Prepared Statement?

バインドされたパラメーターを複数回使用する

データベース プログラミングでは、SQL インジェクション攻撃を防ぐためにバインドされたパラメーターを使用することが重要です。ただし、開発者は、準備されたステートメント内で同じパラメーターを複数回使用しようとすると、問題が発生することがよくあります。

元の問題ステートメント

元の投稿では、ユーザーは、UNION SELECT を利用して、それぞれが異なる検索条件を持つ異なるテーブルからデータをフェッチする検索エンジンを実装したいと考えています。クエリには、プリペアド ステートメントにバインドされている「:term」パラメータのインスタンスが複数含まれています。

ソリューション: ユーザー定義変数

提供されるソリューションは、バインドされたパラメーターを複数回使用するための代替アプローチ。 MySQL ユーザー定義変数を利用することで、開発者はコードを簡素化し、読みやすさを向上させることができます。

  1. 変数の初期化: MySQL ユーザー定義変数を作成し、目的の値を割り当てます。
  2. 変数の利用: リファレンスクエリ内のユーザー定義変数。そうでなければ「:term」を複数回使用することになります。

コード例

$sql = "SET @term = :term";

$stmt = $dbh->prepare($sql);
$stmt->bindValue(":term", "%$term%", PDO::PARAM_STR);
$stmt->execute();

$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term";

$stmt = $dbh->prepare($sql);
$stmt->execute();
$stmt->fetchAll();
ログイン後にコピー

利点

  • コードの改善読みやすさ
  • 追加の PHP 関数の必要性が軽減
  • パラメータ名の競合の心配がありません

欠点

  • 追加の MySQL クエリが必要です

以上が準備されたステートメントでバインドされたパラメーターを複数回再利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート