Php MySQLi随机和临时致命错误

Php MySQLi随机和临时致命错误,php,mysqli,intermittent,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%的时间内执行良好,

我有一个使用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%的时间内执行良好,但每隔一段时间就会崩溃。它崩溃的作业尚未删除,并保留在队列中,等待其他工作进程重新处理。因此,当我重新启动worker时,它会处理与刚才崩溃的作业相同的作业,而不会出现问题

我的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

从听起来,数据库连接失败了,但是,当工作人员删除作业并抓取下一个作业时,使用相同的连接工作正常。这意味着什么?

实施一些错误控制,以找出语句准备不起作用的确切原因。具体来说,请参见第一阶段:准备。我已经用错误代码/消息更新了我的问题。您是否将准备好的语句与concat内容混合在一起?你怎么知道$table有一个有效的值?@LuisSiquot我把prepared语句和表名的连接数据混合在一起,因为我从来没有得到一个prepared语句来接受变量表名。$table的值是有效的,由服务器生成。worker无法运行,因此如果$table不存在且有效,则无法执行mysqli。另外,为了安全起见,我将输出表名和$Limit,$rowID以及mysql错误。这些值存在且有效。