Rumah > Soal Jawab > teks badan
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粉2504220452023-10-22 12:11:47
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粉7859577292023-10-22 09:31:38
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.