我在我的php error_log中得到了以下错误
PHP警告:发送查询包时出错。测试/home/ PID=29770 /test.php中的第87行
在我的php脚本的第87行,代码id
$DBH->beginTransaction();
在此之后,当我提交时,我会得到以下错误
异常'PDOException‘,并在/home/test/test.php:98中显示消息'There no active transaction’
我已经设置了max_allowed_packet=512M
,我的表是InnoDB
这里出了什么问题?
EDIT:我的代码在一个循环中运行,以便将总的100,000+记录插入到表中,我在每个事务中执行5000次多次插入。这是我的代码结构
beginTransaction
Multiple insert query for 5000 records
commit
在循环中运行以插入100,000+记录。脚本有时会成功运行,有时会失败。
我在6-7个循环的中间得到这个错误。(在插入30k到40k记录之后)
发布于 2016-01-25 14:12:02
我在网上搜索了“发送查询数据包时出错”这句话。它能够打开这个链接:http://www.willhallonline.co.uk/blog/max-packet-size-php-error
这篇文章的作者也有类似的问题,他也尝试了“增加max_allowed_packet
大小”和增加超时,但都不起作用。但似乎起作用的是将工作分成更小的部分。
我们新的较小的csv文件在MySQL中成功更新,尽管我们仍然不知道是什么导致了最初的错误。
我不清楚他们是在一个PHP进程的生命周期内处理了许多块,还是多次运行代码,但这个想法似乎很合理;也许您可以试一试。
发布于 2016-03-21 16:34:22
另一种可能性是将数据写入CSV文件,并使用MySQL LOAD DATA INFILE
将其加载到数据库(这里是link to MySQL docs)。我尝试使用大小为250MB的CSV文件,它工作得很好。
发布于 2015-12-09 21:27:04
与数据库的连接可能不是持久的。这可能会导致事务在提交之前被清除,从而导致错误。
我宁愿评论,因为这不是一个“答案”本身,但不幸的是,我没有所需的声誉。
https://stackoverflow.com/questions/33858576
复制相似问题