Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh memasukkan berbilang baris dengan cekap ke dalam pangkalan data menggunakan pernyataan yang disediakan oleh PDO?

Bagaimanakah saya boleh memasukkan berbilang baris dengan cekap ke dalam pangkalan data menggunakan pernyataan yang disediakan oleh PDO?

Susan Sarandon
Susan Sarandonasal
2024-11-09 09:27:02595semak imbas

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

Memasukkan Berbilang Baris dengan Cekap dengan Penyata Disediakan PDO

Daripada melaksanakan berbilang penyata sisipan dengan parameter berasingan, PDO membenarkan pemasukan berbilang baris menggunakan satu pertanyaan. Pendekatan ini meningkatkan prestasi dan keselamatan dengan menghalang keperluan untuk menyediakan dan melaksanakan penyataan beberapa kali.

Sebagai contoh, untuk memasukkan nilai daripada tatasusunan $values ​​ke dalam jadual jadual:

$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);

Dalam penyelesaian ini, ? ruang letak dijana secara dinamik berdasarkan bilangan baris dan lajur. Parameter kemudiannya dilampirkan pada tatasusunan dan diserahkan kepada kaedah pelaksanaan sebagai tatasusunan tunggal. Ini menjamin bahawa setiap parameter dikendalikan secara berasingan, memastikan keselamatan data.

Sebagai alternatif, jika terdapat terlalu banyak baris untuk disisipkan dengan cekap menggunakan satu pertanyaan, pertimbangkan untuk melaksanakannya secara individu:

$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);
}

Ini pendekatan mengekalkan faedah keselamatan menggunakan pernyataan yang disediakan sambil menampung set data yang besar.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memasukkan berbilang baris dengan cekap ke dalam pangkalan data menggunakan pernyataan yang disediakan oleh PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn