【问题标题】:Catch "PDOException" with custom exception handler使用自定义异常处理程序捕获“PDOException”
【发布时间】:2013-05-28 13:53:45
【问题描述】:

我有一段简单的代码,在 PHP 中使用 PDO:

$conn = new PDO('mysql:host=localhost;dbname=someDatabase', $username, $password, 
        array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_PERSISTENT => false,
    ));

还有这个自定义异常处理程序:

function my_exceptionHandler($exception) {
    echo "Exception: {$exception->getMessage()}";
}
set_exception_handler("my_exceptionHandler");

虽然自定义异常处理程序捕获了所有其他异常,但它无法捕获 PDO 异常,即当数据库的用户名和密码不正确时,我只得到了简单的错误:

SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) 

有没有什么我想念的,比如针对此类异常的重载自定义异常处理函数? 请注意,当我将 PDO 代码包装在 try 和 catch 块中时,它工作正常,但我想在我的自定义异常处理程序中捕获它。

【问题讨论】:

  • 我认为是因为 PDO 使用了自己的异常句柄类。
  • @hjpotter92 : 那么如何使用自定义异常处理程序捕获 PDOexcepion 呢?

标签: php exception exception-handling pdo


【解决方案1】:

SQLSTATE[HY000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)

如果您收到的是full and complete错误消息 - 那么您自己的代码(很可能是全局 try..catch)会打印出捕获的错误。
(如果没有 - 请正确提问,提供完整和完整的错误消息 - 这样,我们将能够为您提供帮助。)

【讨论】:

  • 它被另一个我忘记的全局 try catch 包围了。
猜你喜欢
  • 2018-05-30
  • 2017-10-30
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多