準備されたステートメントを使用した複数の行の挿入
準備されたステートメントを使用した複数の行の挿入は、セキュリティを維持しながらデータベースにデータを追加する便利な方法です。データベース テーブルに挿入する値の配列があるとします。
$values = [ [ 'val1' => 'val1', 'val2' => 'val2', 'val3' => 'val3' ], [ 'val1' => 'another_val1', 'val2' => 'another_val2', 'val3' => 'another_val3' ], // and so on... ];
単一の挿入クエリの使用
プリペアド ステートメントを使用してこれらの行を挿入するには、次のようにします。複数の VALUES 句を含む INSERT クエリを使用できます。
INSERT INTO table (col1, col2, col3) VALUES ( (:val11, :val21, :val31), (:val12, :val22, :val32), (:val13, :val23, :val33) )
各行について、パラメータのセットを作成し、静的な値を名前付きパラメータに置き換えます。これにより、各パラメータが個別にバインドされるようになります。
$params = []; foreach ($values as $row) { $params[':val1' . count($params)] = $row['val1']; $params[':val2' . count($params)] = $row['val2']; $params[':val3' . count($params)] = $row['val3']; } $sql = "INSERT INTO table (col1, col2, col3) VALUES (" . implode(',', array_keys($params)) . ")"; $stmt = DB::getInstance()->prepare($sql); $stmt->execute($params);
大量の行のチャンク化
挿入する行が大量にある場合は、より効率的です。過剰なメモリ使用を避けるために、それらを小さなバッチに分割します。 array_chunk を使用して、値の配列を小さなチャンクに分割できます。
$chunkSize = 100; // Adjust this to your needs $chunks = array_chunk($values, $chunkSize); foreach ($chunks as $chunk) { // Prepare and execute insert query for each chunk // ... }
代替アプローチ: 1 つずつ INSERT
各行を個別に挿入する必要がある場合は、次のアプローチを使用できます:
$stmt = DB::getInstance()->prepare( "INSERT INTO table (col1, col2, col3) VALUES (:val1, :val2, :val3)" ); foreach ($values as $row) { $stmt->bindParam(':val1', $row['val1']); $stmt->bindParam(':val2', $row['val2']); $stmt->bindParam(':val3', $row['val3']); $stmt->execute(); }
この方法は効率的ではありませんが、大規模な場合には必要になる場合があります。データセット。
以上がPHP でプリペアドステートメントを使用してデータベースに複数の行を挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。