cari

Rumah  >  Soal Jawab  >  teks badan

Cara terbaik untuk memasukkan kumpulan dalam mysqli?

<p>Saya sedang mencari teknik selamat suntikan SQL untuk memasukkan sejumlah besar baris (~2000 baris) sekali gus menggunakan PHP dan MySQLi. </p><p>Saya mempunyai tatasusunan yang mengandungi semua nilai yang mesti mengandunginya. Pada masa ini saya sedang melakukan ini: </p> <pre class="brush:php;toolbar:false;"><?php $array = array("susun", "dengan", "tentang", "2000", "nilai"); foreach ($array sebagai $one) { $query = "MASUKKAN KE DALAM jadual (pautan) NILAI (?)"; $stmt = $mysqli->prepare($query); $stmt ->bind_param("s", $one); $stmt->execute(); $stmt->tutup(); } ?></pra> <p>Saya cuba call_user_func_array() tetapi ia mengakibatkan limpahan tindanan. </p> <p>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>
P粉951914381P粉951914381446 hari yang lalu500

membalas semua(2)saya akan balas

  • P粉530519234

    P粉5305192342023-08-25 15:20:13

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

    balas
    0
  • P粉340980243

    P粉3409802432023-08-25 00:31:22

    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.

    balas
    0
  • Batalbalas