我正在寻找一种 SQL 注入(inject)安全技术,可以使用 PHP 和 MySQLi 一次插入大量行(约 2000 行)。
我有一个数组,其中包含必须包含的所有值。
目前我正在这样做:
<?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() ,但它导致了堆栈溢出。
什么是更快的方法来做到这一点(比如一次插入它们?),但仍然可以防止 SQL 注入(inject)(比如准备好的语句)和堆栈溢出?
最佳答案
通过将插入内容放入事务中,您应该能够大大提高速度。您还可以将准备和绑定(bind)语句移到循环之外。
$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 秒。
或者速度提高两个数量级
,至少对于该测试而言。
关于php - 在 mysqli 中插入许多值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260207/