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())
导致此错误的原因是什么?我该如何解决?