PDO 开始事务失败

2022-08-30 23:47:58

我在 php error_log中遇到以下错误

PHP 警告:发送查询数据包时出错。PID=29770 在 /home/test/test.php 行 87 上

在我的php脚本中的第87行,代码ID

$DBH->beginTransaction();

之后,当我提交时,我得到以下错误

异常“PDOException”,并在 /home/test/test 中显示消息“没有活动事务.php:98

我已经设置了,我的表是max_allowed_packet=512MInnoDB

这是怎么回事?

编辑:我的代码在循环中运行,将总共100,000 +条记录插入到表中,我正在每个事务中执行5000多次插入。这是我的代码结构

beginTransaction
 Multiple insert query for 5000 records
commit

循环运行以插入 100,000 多条记录。有时脚本运行成功,有时也会失败。

我在6-7个循环的中间得到这个错误。(插入 30k 到 40k 记录后)


答案 1

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

该帖子的作者也有类似的问题,并且还尝试了“增加大小”和增加超时,但这不起作用。但似乎有效的是将工作分成更小的块。max_allowed_packet

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

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


答案 2

另一种可能性是将数据写入CSV文件,并使用MySQL将其加载到数据库中(这是MySQL文档的链接)。我尝试使用最大250MB的CSV文件进行此操作,并且效果很好。LOAD DATA INFILE


推荐