PHP を使用した MySQL の可変サイズの変数リストのプリペアド ステートメント
多くのデータベース操作では、可変数の引数を使用してクエリを実行する機能が必要です。たとえば、人物のデータベースでは、クエリによって ID が特定のリストに含まれるレコードが選択される場合があります。ただし、リスト内の ID の数は変化する可能性があります。
この問題にはいくつかの解決策が考えられます。
解決策 1: ダミー値
1 つのアプローチでは、固定数の変数を受け入れるステートメントを作成し、テーブルに存在しないことが保証されているダミー値を残りの変数に入力します。ただし、この戦略は、ダミー値が多数あるリストでは非効率的である可能性があります。
解決策 2: 動的クエリの構築
もう 1 つのオプションは、準備されたステートメントと代わりに、クエリ文字列を動的に構築し、インジェクション攻撃の可能性を注意深くチェックします。このアプローチでは、結果として得られるクエリが安全で悪用されていないことを確認するための警戒が必要です。
効率的なソリューション
可変サイズの変数リストをより効率的に処理するには:
一時的な解決策テーブル:
各 ID を挿入する一時テーブルを作成し、クエリ内でそれに対して結合を実行します。
動的ステートメントの準備によるソリューション:
sprintf 関数を使用して、適切な数のプレースホルダーを含む準備済みステートメントを動的に作成し、提供されたステートメントを使用して実行します。パラメータ:
$dbh=new PDO($dbConnect, $dbUser, $dbPass); $parms=array(12, 45, 65, 33); $st=$dbh->prepare(sprintf( 'SELECT age, name FROM people WHERE id IN (%s)', implode(',',array_fill(0,count($parms),'?')) )); $st->execute($parms);
この手法は、可変数の引数に対応しながら、準備されたステートメントの効率を提供します。一時テーブルと動的ステートメント準備ソリューションのどちらを選択するかはリストのサイズによって決まり、後者はリストが小さい場合に適しています。
以上が可変サイズの ID リストを使用したクエリに MySQL のプリペアド ステートメントを PHP で使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。