我的php error_log
中出现以下错误PHP警告:发送QUERY数据包时出错。第87行/home/test/test.php中的PID = 29770
在我的php脚本的第87行代码id
$DBH->beginTransaction();
之后,当我提交时,我收到以下错误
异常'PDOException',并在/home/test/test.php:98中显示消息'没有活动的事务'
我已设置max_allowed_packet=512M
,我的表格为InnoDB
这里有什么问题?
编辑:我的代码在一个循环中运行,以便在表中插入总共100,000多条记录,我在每个事务中执行5000次多次插入。 这是我的代码结构
beginTransaction
Multiple insert query for 5000 records
commit
在循环中运行以插入100,000多条记录。有时脚本会成功运行,但有时会失败。
我在6-7循环中得到了这个错误。(在插入30k到40k记录之后)
答案 0 :(得分:1)
另一个可能性是将数据写入CSV文件并使用MySQL LOAD DATA INFILE
将其加载到您的数据库(这里是link to MySQL docs)。
我尝试使用大小高达250MB的CSV文件并且效果非常好。
答案 1 :(得分:0)
有可能与数据库的连接不是持久的。这可能会导致事务在提交之前消失,从而导致错误。
我宁愿发表评论,因为这不是"答案"本身,但不幸的是我没有所需的声誉。
答案 2 :(得分:0)
我在网上搜索了“发送QUERY数据包时出错”这句话。它能够打开此链接:http://www.willhallonline.co.uk/blog/max-packet-size-php-error
该帖子的作者也有类似的问题,并尝试了“增加max_allowed_packet
大小”并增加了超时但这没有用。但似乎有效的做法是将工作分成更小的块。
我们新的小型csv文件在MySQL内部成功更新,但我们仍然没有更明智的原因导致原始错误。
我不清楚他们是否在一个PHP进程的生命周期内处理了许多块,或者他们是否多次运行代码,但这个想法似乎是合理的;也许你可以尝试一下。