MySQLi随机和临时致命错误

时间:2015-04-22 16:40:34

标签: php mysqli intermittent

我有一个环境,我使用beanstalkd和pheanstalk来异步排队和处理作业。我的一个工作人员传递了MySQL表名,行ID以及其他信息。该工作人员然后更新该表的那一行。

99%的时间都可以正常使用。但是,偶尔我的工作人员会崩溃:

PHP Fatal error:  Call to a member function bind_param() on a non-object in /path/to/file.php on line 62

如前所述,同样的行在99%的时间内执行得很好,但每次都会崩溃。它崩溃的工作尚未删除,并留在队列中,由另一名工人重新处理。因此,当我重新启动工作程序时,它会处理刚刚崩溃的相同作业,而不会出现问题。

我的PHP看起来像这样:

$stmt = $mysqli->prepare("UPDATE `database`.`$table` SET `Limit` = ? WHERE `D_ID` = ?");
$stmt->bind_param("si", $Limit, $rowID);
$stmt->execute();
$stmt->close();

我能想到的最好的是,因为这是异步的,所以其他一些进程碰巧在执行时锁定了该表/行。我想象MySQL的查询只是等待它转过来而不是正确的崩溃。

不幸的是,如果是这种情况,我无法测试甚至修复它,所以我需要一个解决方法。如果不是这种情况,我需要一些指导原因是什么以及如何解决/修复它。

更新 正如评论中所建议的,我检查了mysql错误代码和错误消息。结果是:

(2006) MySQL server has gone away

从它的声音来看,数据库连接失败了,但是,当工作人员删除作业并抓取下一个作业时,它使用相同的连接就可以正常工作。这是什么意思?

0 个答案:

没有答案