Apakah cara paling berkesan untuk MEMASUKKAN berbilang nilai dalam mysqli?
P粉908138620
P粉908138620 2023-10-21 14:39:48
0
2
740

Saya sedang mencari teknik selamat suntikan SQL untuk memasukkan sejumlah besar baris (~2000 baris) sekali gus menggunakan PHP dan MySQLi.

Saya mempunyai tatasusunan yang mengandungi semua nilai yang mesti terkandung di dalamnya. Pada masa ini saya melakukan ini:

<?php
$array = array("array", "with", "about", "2000", "values");

foreach ($array as $one) 
{
    $query = "INSERT INTO table (link) VALUES ( ?)";
    $stmt = $mysqli->prepare($query);
    $stmt ->bind_param("s", $one);
    $stmt->execute();
    $stmt->close();
}
?>

Saya cuba call_user_func_array() tetapi ia mengakibatkan limpahan tindanan.

Apakah cara yang lebih pantas untuk melakukan ini (seperti memasukkan kesemuanya sekali gus?) tetapi masih menghalang suntikan SQL (seperti pernyataan yang disediakan) dan limpahan tindanan?

P粉908138620
P粉908138620

membalas semua(2)
P粉250422045

Cuba lagi, saya tidak faham mengapa kod asal anda tidak berfungsi selepas sedikit pengubahsuaian:

$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);

foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
P粉785957729

Dengan memasukkan sisipan anda ke dalam transaksi, anda seharusnya dapat meningkatkan kelajuan dengan ketara. Anda juga boleh mengalihkan penyata sediakan dan ikat di luar gelung.

$array = array("array", "with", "about", "2000", "values");
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);

$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");

Saya telah menguji kod ini pada pelayan web saya untuk 10,000 lelaran.

Tiada urusan:226 秒。 Waktu dagangan: 2 秒。 Atau 速度提高两个数量级, sekurang-kurangnya untuk ujian ini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan