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