php pdo中没有抛出异常

时间:2017-10-19 03:45:42

标签: php pdo

我试图在PHP中抛出异常,但它不会抛出。当我故意给出密码字符串时(虽然我的localhost上没有密码)但它会出现这个错误:

  

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

虽然它应该抛出我的自定义错误消息。如果我故意将localhost写为focalhost或将用户名从root更改为hoot,则不会抛出我的自定义异常消息。

<?php
try{
    $con = new PDO("mysql:host = localhost; dbname = chatdump", "root","");

    if(!$con){
        throw new Exception("There was some error connecting to database");
    }
}

catch(Exception $e){
    echo $e->getMessage();
}
?>

1 个答案:

答案 0 :(得分:0)

异常会停止进一步执行,因此永远不会执行您的条件。

但更重要的是,您抛出这样一个自定义但无用的错误消息的想法是错误的。您永远不应该将有用的精确错误消息重写为模糊的通知。

你应该做的是单独留下你的PDOException,然后在某个地方捕获它,然后处理它。它可以是整个代码的全局try-catch,也可以是专用的错误处理程序。

您应该了解,有两种不同类型的人需要了解错误:负责网站和网站访问者的工作人员。两者都需要完全不同的错误消息。但是,您正在剥夺前者从解决网站问题所需的错误消息。

那你应该做什么

  1. 不要仅使用自定义文本重新抛出错误例外
  2. 在全局try catch或专用错误处理程序
  3. 中捕获所有错误异常
  4. 记录网站管理员的确切错误消息
  5. 显示包含站点用户自定义错误消息的精美HTML页面。
  6. 最近我写了一篇关于PHP error reporting的文章,你可能会觉得这篇文章很有意思。