suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Der beste Weg zum Batch-Einfügen in MySQL?

<p>Ich suche nach einer sicheren SQL-Injection-Technik, um mit PHP und MySQLi eine große Anzahl von Zeilen (~2000 Zeilen) auf einmal einzufügen. </p><p>Ich habe ein Array, das alle Werte enthält, die es enthalten muss. Momentan mache ich Folgendes: </p> <pre class="brush:php;toolbar:false;"><?php $array = array("array", "with", "about", "2000", "values"); foreach ($array als $one) { $query = "INSERT INTO table (link) VALUES (?)"; $stmt = $mysqli->prepare($query); $stmt ->bind_param("s", $one); $stmt->execute(); $stmt->close(); } ?></pre> <p>Ich habe call_user_func_array() ausprobiert, aber es führte zu einem Stapelüberlauf. </p> <p>Was ist eine schnellere Möglichkeit, dies zu tun (z. B. alle auf einmal einzufügen?), aber dennoch SQL-Injection (z. B. vorbereitete Anweisungen) und Stapelüberlauf zu verhindern? </p>
P粉951914381P粉951914381520 Tage vor561

Antworte allen(2)Ich werde antworten

  • P粉530519234

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

    再试一次,我不明白为什么您的原始代码在稍作修改后就无法工作:

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

    Antwort
    0
  • P粉340980243

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

    通过将插入内容放入事务中,您应该能够大大提高速度。您还可以将准备和绑定语句移到循环之外。

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

    我在我的网络服务器上测试了此代码 10,000 次迭代。

    没有事务:226 秒。 交易时间:2 秒。 或者速度提高两个数量级,至少对于该测试而言。

    Antwort
    0
  • StornierenAntwort