2015-11-22 48 views
16

我得到在我的PHP下面的错误是error_logPDO的BeginTransaction失败

PHP的警告:错误在发送QUERY包。 PID = 29770上线/home/test/test.php 87

而且在我的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的记录后)

+1

beginTransaction()行之前出现了什么代码?请编辑以显示更多的上下文。特别是,是否有先前的查询可能没有获取所有行,或者是否有可能干扰'$ DBH'连接状态的其他情况。 –

+0

什么是你想要运行的查询?给我们一个例子 – Elentriel

+0

请给出一个例子,或者告诉你正在做的操作的大小 – Amir

回答

0

有一种可能性,即到数据库的连接是不持久的。这可能会导致事务在提交前消失,从而导致错误。

我宁可评论,因为这本身不是“答案”,但不幸的是我没有所需的声望。

0

我做了一些网络搜索短语“发送QUERY数据包时出错”。它能够打开这个链接:http://www.willhallonline.co.uk/blog/max-packet-size-php-error

该帖子的作者有类似的问题,并尝试“增加max_allowed_packet大小”和增加超时以及但没有奏效。但看起来有效的是把工作分解成更小的块。

我们新的较小的csv文件已在MySQL内成功更新,尽管我们仍然不明白导致原始错误的原因。

这我不清楚他们是否处理了许多块一个PHP程序的生命周期内,或者,如果他们多次跑的代码,但这个想法似乎是合理;也许你可以试试看。

1

另一种可能性是将数据写入CSV文件并使用MySQL LOAD DATA INFILE将其加载到数据库(这里是link to MySQL docs)。 我尝试了这个CSV文件大小高达250MB,它工作得很好。