Лучший способ ВСТАВИТЬ множество значений в mysqli?

Я ищу безопасную технологию SQL-injection для вставки большого количества строк (около 2000) сразу с PHP и MySQLi.
У меня есть массив со всеми значениями, которые необходимо включить. В настоящее время я делаю это:

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

Я попробовал call_user_func_array () , но это вызвало stackoverflow.

Что такое более быстрый способ сделать это (например, вставлять их все одновременно?), Но все же защищен от SQL-инъекций (например, подготовленного оператора) и stackoverflows?
Спасибо!

Вы должны иметь возможность значительно увеличить скорость, разместив свои вставки внутри транзакции. Вы также можете переместить свои инструкции подготовки и привязки за пределы своего цикла.

 $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 seconds. С транзакцией: 2 seconds. Или two order of magnitude speed increase на two order of magnitude speed increase , по крайней мере для этого теста.

Повторяя это, я не понимаю, почему ваш исходный код не будет работать с небольшими изменениями:

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

Да, вы можете создать один большой запрос вручную, с чем-то вроде:

 $query = ""; foreach ($array as $curvalue) { if ($query) $query .= ","; $query .= "('" . $mysqli->real_escape_string($curvalue) . "')"; } if ($query) { $query = "INSERT INTO table (link) VALUES " . $query; $mysqli->query($query); }