最近用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