php mysqli/multi_查询不能进行多次

php mysqli/multi_查询不能进行多次,php,mysql,bulk-load,Php,Mysql,Bulk Load,我有一个字符串数组,它们是sql“输入到…”查询。我在这个数组中循环,将每50个数组组合成一个新字符串,然后发送到mysql数据库。之后,我重置了临时字符串,并为新查询做好准备 但我的数组在第一次查询后停止,不想发送所有内容,所以在DB服务器上,我总是只有50条记录。如何修复代码并发送所有内容 代码: 为了解决代码不起作用的原因,我建议在将其作为查询提交之前,先查看$queryPartial的完整字符串。我打赌这是一个语法错误,因为您没有用分隔语句或类似的东西 查看查询本身,而不是代码,可能会更

我有一个字符串数组,它们是sql“输入到…”查询。我在这个数组中循环,将每50个数组组合成一个新字符串,然后发送到mysql数据库。之后,我重置了临时字符串,并为新查询做好准备

但我的数组在第一次查询后停止,不想发送所有内容,所以在DB服务器上,我总是只有50条记录。如何修复代码并发送所有内容

代码:


为了解决代码不起作用的原因,我建议在将其作为查询提交之前,先查看
$queryPartial
的完整字符串。我打赌这是一个语法错误,因为您没有用
分隔语句或类似的东西

查看查询本身,而不是代码,可能会更清楚错误所在

您还应该检查mysqli函数返回的错误状态。如果发生错误,大多数mysqli函数都会返回FALSE,您应该检查
$connection->error
以查看错误消息。如果不这样做,可能会出现错误,但你永远不会知道

我猜您正在使用multi-query来节省数据库调用,假设更少的调用将有助于提高性能

但与插入数据的事务成本相比,进行调用的成本很小。使用
multi\u query()
几乎没有任何好处

下面的代码做同样的事情,具有几乎相同的性能,它是更简单的代码:

foreach ($data as $index => $queryToSend) {
    $result = $connection->query($queryToSend);
    if ($result === false) {
        error_log("SQL: $queryToSend ERROR: {$connection->error}");
    }
}
(始终检查mysqli函数返回的错误状态!)

如果您试图提高大容量插入的性能,与其他优化相比,使用
multi\u query()
的好处微不足道:

  • 将多行合并到一个
    INSERT
    语句中
  • 将多个语句合并到一个事务中
  • 使用
    加载数据填充
    而不是
    插入

请参阅我的演示文稿,了解性能比较。

首先,感谢您如此复杂的回答。我确信查询本身不是问题,因为所有查询都是由我以前的代码自动生成的,并且在末尾有分号。正如你所建议的那样,我在每个循环迭代中都设置了$connection->error,并获得了多条“命令不同步;现在无法运行此命令”消息。这是什么意思?看到了吗
foreach ($data as $index => $queryToSend) {
    $result = $connection->query($queryToSend);
    if ($result === false) {
        error_log("SQL: $queryToSend ERROR: {$connection->error}");
    }
}