我正在寻找一种sql注入安全技术,用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(),但它导致了stackoverflow.
有什么更快的方法可以做到这一点(比如一次插入所有这些?),但仍然可以防止sql注入(如准备好的语句)和stackoverflows?谢谢!
解决方法:
通过将插入放在事务中,您应该能够大大提高速度.您还可以在循环外部移动prepare和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");
编辑:
我在我的Web服务器上测试了10,000次迭代的代码.
没有交易:226秒.
随着交易:2秒.
或者至少对于该测试,速度增加两个数量级.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。