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

标签 php mysql mysqli

我正在寻找一种 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)(比如准备好的语句)和堆栈溢出?

最佳答案

通过将插入放入事务中,您应该能够大大提高速度。您还可以将 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");

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

没有事务:226 秒。 使用事务:2 秒。 或者 两个数量级的速度提升,至少对于该测试而言。

关于php - 在 mysqli 中插入许多值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15149157/

相关文章:

php - 用户提供的输入 SQL 转义

php - 在 while 循环内从 mysql 获取一个值并在 while 循环内使用它

javascript - 通过PHP和Mysqli打开PFD文件

php - 使用 php 和 jquery 镜像登录

php - 限制mysqli到php数据

php - 在 PHP 中使用此正则表达式时遇到问题

php - 当我将函数 args 连接到 php7.0 扩展中时如何获取它

php - 循环遍历 XML,仅在特定 ID 处循环 "look"

javascript - 将多个值从js页面传递到php页面

mysql - SQL 查询破坏了我们的游戏! (后端服务器已满)