最近用thinkphp時發現沒法捕獲mysql的錯誤信息,例如向表中插入一個主鍵 重複的數據時,程序便卡在那條語句上,就像下面這樣php
:(mysql
FILE: D:\*****\ThinkPHP\Library\Think\Db\Driver.class.php LINE: 226sql
#0 D:\*****\ThinkPHP\Library\Think\Db\Driver.class.php(226): PDOStatement->execute()thinkphp
在代碼中 使用try catch 無效,最後修改 Driver.class.php文件框架
中169行和226行的this
$result = $this->PDOStatement->execute();
修改成spa
try{//lighthouse
$result = $this->PDOStatement->execute() ;
}catch (\PDOException $e) {
echo 'queryStr='.$this->queryStr.'<br/>';
print "Error: " . $e->getMessage() . "<br/>";
return -1;
}
這樣就能夠靈活處理pdo的錯誤了,固然上面的顯示錯誤信息的代碼,能夠改爲給管理員發郵件,或是記錄日誌等功能。
日誌
這個辦法改動了框架底層,之後升級時會比較麻煩。哪位朋友有更好的辦法還請不吝告知。code