【问题标题】:php pdo catching connection exception with custom exception handlerphp pdo 使用自定义异常处理程序捕获连接异常
【发布时间】:2014-05-05 08:23:36
【问题描述】:

我试图在这里实现的是,当 pdo 连接引发异常时,我的自定义异常处理程序会获取消息并将其传递给我,以便我可以使用我的自定义异常处理程序捕获它。

try {
       $mysqli = new PDO('mysql:host='.THOST.';dbname='.TDB.'', TUSER, TPASS);
     }   

          catch (PDOException $e) {

              $a = $e->getMessage();
          throw new customException  ( "Failed to connect to MySQL:". $a );   
          die();
          }

         catch (customException $e){ 

                 echo  $e->errorMessage(); 
       }

但它返回此错误: 致命错误:带有消息的未捕获异常“customException”......

【问题讨论】:

  • 这里没有自定义处理程序
  • @YourCommonSense 我有一个自定义异常类,如果在开发中它只是以某种方式显示错误,而在生产中它会将错误通过电子邮件发送给我。

标签: php exception pdo custom-exceptions


【解决方案1】:

将其包装在另一个 try-catch 块中。

try {
  try {
    $mysqli = new PDO('mysql:host='.THOST.';dbname='.TDB.'', TUSER, TPASS);
  } catch(PDOException $e) {
    $a = $e->getMessage();
    throw new customException  ( "Failed to connect to MySQL:". $a );
  }
} catch(customException $e) {
  echo  $e->errorMessage();
  // Do what you want
}

【讨论】:

    【解决方案2】:

    您将自定义异常 handler 与自定义异常类混淆了。你需要前一个,而另一个答案是错误的。

    解释。

    在您的应用程序代码中,您只需编写一行:

    $pdo = new PDO('mysql:host='.THOST.';dbname='.TDB.'', TUSER, TPASS); 
    

    无需多次尝试等。只是您需要运行的代码。

    虽然所有处理逻辑都进入handler

    【讨论】:

    • 抱歉,是的,你是对的,我有一个自定义异常类。以下答案在我尝试时有效。请解释为什么它是不正确的。
    • 解释了。顺便说一句,通过电子邮件发送错误是一个非常糟糕的主意。
    猜你喜欢
    • 2018-05-30
    • 2013-05-28
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2018-09-24
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多