带有大结果集的PHP mysqli:警告:空行数据包正文

时间:2016-03-22 21:29:33

标签: php mysql mysqli php-5.5

TL; DR为什么我的PHP脚本会以Warning: Empty row packet body退出?

我有一个PHP CLI脚本,使用mysqli函数在2个MySQL数据库之间迁移产品数据。每个数据库的结构都不同,我的脚本将数据转换为从A的结构转换为B的结构。

我的代码的基本结构是:

Loop over A.products
    Loop over A.product_variants that match the id from A.products
    Insert into B.products

由于A.products有超过一百万行,为避免内存不足,我使用MYSQLI_USE_RESULT而不是MYSQLI_STORE_RESULT。

我在循环访问A.products结果集时尝试运行查询以获取A.product_variants,我收到此错误:命令不同步;你现在不能运行这个命令

为了解决这个问题,我现在使用一个连接获取A.products,使用单独的连接获取A.product_variants。插入使用与数据库B的第三个连接。

这现在可以成功运行,直到它到达A.products的第1030行。它并不总是停在同一排,而是关闭。然后我得到这个错误并且循环退出:

Warning: Empty row packet body in script.php line 500

$ mysqli-> fetch_object()行:

while ($product = $res_products->fetch_object())
  • PHP版本:5.5.29
  • 客户端API库版本=> mysqlnd 5.0.11-dev
  • MySQL服务器:5.5

导致此错误的原因是什么?我该如何解决?

0 个答案:

没有答案