ホームページ >データベース >mysql チュートリアル >PDO プリペアド ステートメントを使用してデータベースに複数の行を効率的に挿入するにはどうすればよいですか?

PDO プリペアド ステートメントを使用してデータベースに複数の行を効率的に挿入するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 09:27:02641ブラウズ

How can I efficiently insert multiple rows into a database using PDO prepared statements?

PDO プリペアド ステートメントを使用した複数の行の効率的な挿入

個別のパラメーターを使用して複数の挿入ステートメントを実行する代わりに、PDO では複数の行を挿入できます。単一のクエリを使用して。このアプローチにより、ステートメントを複数回準備して実行する必要がなくなり、パフォーマンスとセキュリティが強化されます。

たとえば、配列 $values からテーブル table に値を挿入するには、次のようにします。

$params = [];
foreach ($values as $value) {
    array_push($params, $value['val1'], $value['val2'], $value['val3']);
}

$row_length = count($values[0]);
$nb_rows = count($values);
$length = $nb_rows * $row_length;

$args = implode(',', array_map(function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length)));

$query = "INSERT INTO table VALUES " . $args;
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);

このソリューションでは、?プレースホルダーは行と列の数に基づいて動的に生成されます。次に、パラメーターは配列に追加され、単一の配列として実行メソッドに渡されます。これにより、各パラメータが個別に処理され、データのセキュリティが保証されます。

または、単一のクエリを使用して効率的に挿入するには行が多すぎる場合は、行を個別に実行することを検討してください。

$args = array_fill(0, count($values[0]), '?');
$query = "INSERT INTO table VALUES (".implode(',', $args).")";
$stmt = $pdo->prepare($query);

foreach ($values as $row) {
    $stmt->execute($row);
}

これこのアプローチでは、大規模なデータセットに対応しながら、プリペアド ステートメントを使用するセキュリティ上の利点が維持されます。

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

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