ホームページ  >  記事  >  バックエンド開発  >  MySQLi で単一のプリペアド ステートメントを使用して複数の行を挿入するにはどうすればよいですか?

MySQLi で単一のプリペアド ステートメントを使用して複数の行を挿入するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-20 16:38:02258ブラウズ

How to Insert Multiple Rows with a Single Prepared Statement in MySQLi?

MySQLi での単一のプリペアド ステートメントによる複数の行の挿入

問題:

複数の行の挿入プリペアド ステートメントを使用してデータベースに行を追加すると、行ごとに個別のクエリを実行する必要がなくなります。

解決策:

プリペアド ステートメントは通常、単一行の操作を処理しますが、特別なクエリ構文と手法を使用して複数の行を挿入します。

アプローチ:

  1. 値文字列を作成します: array_merge() と implode() を使用して構築します「(, , ), ...」という形式の値の文字列。これは、挿入される行を表します。
  2. ステートメントを準備します: 値文字列を VALUES 句として含むクエリを準備し、括弧で囲みます。
  3. バインディング パラメーターを作成します: の数を決定します。行数を乗算し、行数と行ごとの列数を乗算した「i」(整数値の場合) の文字列の繰り返しを使用してバインド パラメーターを準備します。
  4. 値をバインドします。 ...array_merge( を使用します) ...$rows) を使用して、多次元配列から値を解凍し、パラメーターにバインドします。
  5. ステートメントの実行: 準備されたステートメントを実行して、単一のクエリで指定された行を挿入します。

コード例:

<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
$rowCount = count($rows);
$values = "(&" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . "&)";

$stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES $values");
$stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows));
$stmt->execute();</code>

代替アプローチ:

単一行の準備済みステートメントを使用することもできます。プレースホルダーを使用して行ごとにループで実行します。これは単純ですが、効率が低下する可能性があります。

以上がMySQLi で単一のプリペアド ステートメントを使用して複数の行を挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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