我有一个字符串数组,它们是sql“input into…”查询。我在这个数组中循环,将每50个数组组合成一个新字符串,然后发送到mysql数据库。之后,我重置了我的临时字符串,并为新的查询做准备。
但我的数组在第一次查询后停止,并且不想发送所有内容,所以在db server上我总是只有50条记录。如何修复代码并发送所有内容?
代码:
$data // array with sql queries
$queryPartial = ''; // additional string for 50 queries to send
foreach ($data as $index => $queryToSend) {
$queryPartial .= $queryToSend;
// send partials query
if($index % 50 == 0)
{
if($connection->multi_query($queryPartial))
{
$this->output->writeln('succesfull query number: '.$index);
}
$queryPartial = ''; // clean string for next queries
}
}
//send the rest of the remaining queries
if($queryPartial !== ''){
if($connection->multi_query($queryPartial))
{
$this->output->writeln('rest of the queries sended');
}
}
$connection->close();
1条答案
按热度按时间byqmnocz1#
为了解决代码不起作用的原因,我建议查看
$queryPartial
在将其作为查询提交之前。我打赌有语法错误,因为你没有用;
或者类似的。查看查询本身(而不是代码)可能会更清楚错误所在。
您还应该检查mysqli函数返回的错误状态。如果发生错误,大多数mysqli函数都返回false,您应该检查
$connection->error
对于错误消息。如果你不这样做,错误可能会发生,但你永远不会知道。我猜您是在使用multi-query来节省数据库调用的开销,假设调用次数减少将有助于提高性能。
但是,与插入数据的事务的成本相比,进行调用的成本很小。实际上,使用
multi_query()
.下面的代码做了同样的事情,具有几乎相同的性能,代码简单得多:
(始终检查mysqli函数返回的错误状态!)
如果您试图加快批量插入的性能,请使用
multi_query()
与其他优化相比没有什么好处:将多行合并为一行
INSERT
陈述将多个语句合并到一个事务中
使用
LOAD DATA INFILE
而不是INSERT
查看我的演示文稿快速加载数据!用于性能比较。