為了更高效的服務(wù)器訪問速度,我們會(huì)使用mysql 或者其他數(shù)據(jù)庫的長連接 來提高訪問速度,
以下內(nèi)容以mysql pdo 為例:
問題:
在cli 常駐內(nèi)存的情況下,會(huì)有許多情況造成創(chuàng)建的連接失效;
解決方法:
在訪問數(shù)據(jù)庫的時(shí)候加上 try catch 捕獲
捕獲到錯(cuò)誤是 2006 或者 ?2013 的時(shí)候 表示連接失效 這時(shí)候 重新連接數(shù)據(jù)庫,以保證程序正常運(yùn)行;
//?在和數(shù)據(jù)庫交互的地方加上try?catchpublic?function?Init($query) ????{ ????????try{ ????????????//?todo?這里是操作數(shù)據(jù)庫的邏輯 ????????}catch?(Exception?$e)?{ ????????????if?(?$e->errorInfo[1]?===?2006?||?$e->errorInfo[1]?===?2013?)?{ ????????????????//?todo?下面填寫?或者調(diào)用連接數(shù)據(jù)庫的代碼 ????????????????$dsn?=?'mysql:dbname='?.?$this->settings["dbname"]?.?';host='?.?$this->settings["host"]?.?''; ????????????????$this->pdo?=?new?PDO($dsn,?$this->settings["user"],?$this->settings["password"],?array(PDO::MYSQL_ATTR_INIT_COMMAND?=>?"SET?NAMES?utf8;")); ????????????????$this->pdo->setAttribute(PDO::ATTR_ERRMODE,?PDO::ERRMODE_EXCEPTION); ????????????????$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,?true); ????????????????return?true; ????????????} ????????} ????}
var_dump($e->errorInfo); 的值
array(3)?{ ??[0]=> ??string(5)?"HY000" ??[1]=> ??int(2006) ??[2]=> ??string(26)?"MySQL?server?has?gone?away"}
更多workerman知識(shí)請(qǐng)關(guān)注php中文網(wǎng)workerman教程欄目。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END
喜歡就支持一下吧
相關(guān)推薦