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

eaglexpf

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

13139 6 0
6个回答

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数据库被关掉一段时间后重新启动,就会出现这个问题~~

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

[attach]947[/attach]

  • 暂无评论
年代过于久远,无法发表回答
🔝