跑了几个月的接口今天返回Call to a member function prepare() on null~~

0

用workerman写的http接口,在阿里云上面跑了两个多月;今天的接口突然返回了这个错误{"code":500,"message":"Call to a member function prepare() on null"};最重要的是我把workerman重启后就没啥问题了;求原因,求思路~~

已邀请:

walkor

赞同来自:

没看到哪个报错文件及哪一行,不好确定原因

wazsmwazsm

赞同来自:

要调用 prepare 但是调用该方法的对象为 null,如果你是用的官方的 mysql 组件,那么这个错应该是 pdo 对象不存在导致的。看 mysql 组件代码的话,如果断线的话,会进行一次重连,调用了 closeConnection() 方法和 connect() 方法。如果 connect() 方法创建 pdo 对象失败的话, $this->pdo 属性则为 null (closeConnection 的调用), 然后导致了这个错误。


至于为什么断线、为什么连接会失败,就看你的实际情况了,可能是你没用单例导致 mysql 数据库连接太多被拒绝等等...都有可能。

智佳思远

赞同来自:

官网的mysql类创建pdo对象失败是会抛异常的,所以不会再调用到prepare。

智佳思远

赞同来自:

哦,又看了下,有个closeConnectin方法


public function closeConnection()
{
$this->pdo = null;
}

如果调用了这个,然后继续调用这个实例就会报错了

defeatlr

赞同来自:

我也碰到这个问题了,我是定时器定时写MYSQL,如果手动调用了closeConnection方法关闭连接,就会出现这个问题,现在只能暂时把这个去掉了,不知道不关闭会不会有影响

eaglexpf

赞同来自:

mysql数据库被关掉一段时间后重新启动,就会出现这个问题~~


用的官方组件
下面是出异常的地方


图片

要回复问题请先登录注册