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),它应该可以工作。