用workerman寫的http接口,在阿里云上面跑了兩個多月;今天的接口突然返回了這個錯誤{"code":500,"message":"Call to a member function prepare() on null"};
最重要的是我把workerman重啟后就沒啥問題了;求原因,求思路~~
要調(diào)用 prepare 但是調(diào)用該方法的對象為 null,如果你是用的官方的 mysql 組件,那么這個錯應該是 pdo 對象不存在導致的???mysql 組件代碼的話,如果斷線的話,會進行一次重連,調(diào)用了 closeConnection() 方法和 connect() 方法。如果 connect() 方法創(chuàng)建 pdo 對象失敗的話, $this->pdo 屬性則為 null (closeConnection 的調(diào)用), 然后導致了這個錯誤。
至于為什么斷線、為什么連接會失敗,就看你的實際情況了,可能是你沒用單例導致 mysql 數(shù)據(jù)庫連接太多被拒絕等等...都有可能。
哦,又看了下,有個closeConnectin方法
public function closeConnection()
{
$this->pdo = null;
}
如果調(diào)用了這個,然后繼續(xù)調(diào)用這個實例就會報錯了
我也碰到這個問題了,我是定時器定時寫MYSQL,如果手動調(diào)用了closeConnection方法關(guān)閉連接,就會出現(xiàn)這個問題,現(xiàn)在只能暫時把這個去掉了,不知道不關(guān)閉會不會有影響
mysql數(shù)據(jù)庫被關(guān)掉一段時間后重新啟動,就會出現(xiàn)這個問題~~
用的官方組件
下面是出異常的地方
[attach]947[/attach]