用workerman写的http接口,在阿里云上面跑了两个多月;今天的接口突然返回了这个错误{"code":500,"message":"Call to a member function prepare() on null"};最重要的是我把workerman重启后就没啥问题了;求原因,求思路~~
{"code":500,"message":"Call to a member function prepare() on null"};
没看到哪个报错文件及哪一行,不好确定原因
要调用 prepare 但是调用该方法的对象为 null,如果你是用的官方的 mysql 组件,那么这个错应该是 pdo 对象不存在导致的。看 mysql 组件代码的话,如果断线的话,会进行一次重连,调用了 closeConnection() 方法和 connect() 方法。如果 connect() 方法创建 pdo 对象失败的话, $this->pdo 属性则为 null (closeConnection 的调用), 然后导致了这个错误。
至于为什么断线、为什么连接会失败,就看你的实际情况了,可能是你没用单例导致 mysql 数据库连接太多被拒绝等等...都有可能。
官网的mysql类创建pdo对象失败是会抛异常的,所以不会再调用到prepare。
哦,又看了下,有个closeConnectin方法
public function closeConnection() { $this->pdo = null; }
如果调用了这个,然后继续调用这个实例就会报错了
我也碰到这个问题了,我是定时器定时写MYSQL,如果手动调用了closeConnection方法关闭连接,就会出现这个问题,现在只能暂时把这个去掉了,不知道不关闭会不会有影响
mysql数据库被关掉一段时间后重新启动,就会出现这个问题~~
用的官方组件 下面是出异常的地方
[attach]947[/attach]
没看到哪个报错文件及哪一行,不好确定原因
要调用 prepare 但是调用该方法的对象为 null,如果你是用的官方的 mysql 组件,那么这个错应该是 pdo 对象不存在导致的。看 mysql 组件代码的话,如果断线的话,会进行一次重连,调用了 closeConnection() 方法和 connect() 方法。如果 connect() 方法创建 pdo 对象失败的话, $this->pdo 属性则为 null (closeConnection 的调用), 然后导致了这个错误。
至于为什么断线、为什么连接会失败,就看你的实际情况了,可能是你没用单例导致 mysql 数据库连接太多被拒绝等等...都有可能。
官网的mysql类创建pdo对象失败是会抛异常的,所以不会再调用到prepare。
哦,又看了下,有个closeConnectin方法
如果调用了这个,然后继续调用这个实例就会报错了
我也碰到这个问题了,我是定时器定时写MYSQL,如果手动调用了closeConnection方法关闭连接,就会出现这个问题,现在只能暂时把这个去掉了,不知道不关闭会不会有影响
mysql数据库被关掉一段时间后重新启动,就会出现这个问题~~
用的官方组件
下面是出异常的地方
[attach]947[/attach]