PDO beginTransaction失败

时间:2015-11-22 18:35:39

标签: php mysql pdo

我的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记录之后)

3 个答案:

答案 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进程的生命周期内处理了许多块,或者他们是否多次运行代码,但这个想法似乎是合理的;也许你可以尝试一下。