微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 在mysqli中插入许多值的最佳方法?

我正在寻找一种sql注入安全技术,用PHPMysqLi一次插入大量行(约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 举报,一经查实,本站将立刻删除。

相关推荐