Php PDO未捕获PDO异常在连接错误时转储密码,即使使用catch块也是如此
我有这个街区:Php PDO未捕获PDO异常在连接错误时转储密码,即使使用catch块也是如此,php,mysql,pdo,exception-handling,Php,Mysql,Pdo,Exception Handling,我有这个街区: try { $this->dbh = new PDO( "mysql:host=".appparams::dBHost. ";port=".appparams::dBPort. ";dbname=".appparams::dBName. ";charset=utf8", apppara
try {
$this->dbh = new PDO(
"mysql:host=".appparams::dBHost.
";port=".appparams::dBPort.
";dbname=".appparams::dBName.
";charset=utf8",
appparams::dBUser,
appparams::dBPassword,
array(
PDO::ATTR_PERSISTENT => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
)
);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); #line 36
$this->dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
trigger_error("501", E_USER_ERROR);
}
例如,如果我关闭了mysql,我在执行代码时会在错误日志中看到:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory' in /var/www/myweb/mypage/db.php:36\nStack trace:
#0 /var/www/myweb/mypage/db.php(36): PDO->__construct('mysql:host=loca...', 'root', 'my_database_password!!!', Array)
#1 /var/www/myweb/mypage/accesslogmapcontroller.php(84): myweb\\db->__construct()
#2 /var/www/myweb/mypage/main.php(54): myweb\\accesslogmapcontroller::process('READ', Array)
#3 /var/www/myweb/mypage/main.php(179): myweb\\main::main()
#4 {main}\n thrown in /var/www/myweb/mypage/db.php on line 36, referer: http://mydomain.com/myweb/mypage/
正如@Jon所说:
@elcodedocle:如果您没有导入异常,它肯定是名称空间。改为catch(\PDOException$e),它应该可以工作
(一个明显的问题,但有点令人困惑的输出:“Undefined exception”(未定义的异常)将更有助于对此进行调试…此代码是否位于根目录以外的命名空间中?这是因为您触发了一个错误,并且服务器配置中的
display\u errors
是on
。您可以将其记录到一个文件中。或者将其记录到一个文件中,并在catch块中显示一条自定义消息。@TiMESPLiNTER:“致命错误:未捕获异常”应该是足够的提示,不会调用trigger\u error
。啊,你说得对。所以我也倾向于你在评论中提到的名称空间。@elcodedocle:如果你没有导入PDOException
,它肯定就是名称空间<代码>捕获(\PDOException$e),它应该可以工作。