如何检查什么是PHP中的异常


How to check what an exception is in PHP

所以基本上我希望能够以某种方式做一些if语句来检查抛出的异常,以便我echo出一些适当的错误消息,例如

IF异常是MySQL中的重复记录异常那么echo "User Already exists";

下面我已经捕获了异常,它打印了默认的异常错误消息,但是这对用户来说看起来不太好,所以我想检查错误是什么,然后打印出我自己的适当的错误消息,用户将能够识别…例如"用户已经存在"。

try{
$query = "INSERT INTO user VALUES ('', 0, $safe_email, '$hashed_password')";
$result = $db->query($query);
echo '<script type="text/javascript"> alert(''You have successfully registered.'n A confirmation email has been sent to you.''); window.location = ''index.php''; </script>';
}
 catch (Exception $e) {
   echo 'Caught exception: ',  $e->getMessage(), "'n";
}

您应该首先检查用户是否以"非异常"的方式存在,因为从MySQL异常中获得相关和一致的信息是不可能的,或者至少是相当棘手的。

例如,如果您突然决定在表中添加一个id字段并将其设置为主键,那么您的算法将会中断。如果你试图通过识别错误号或其他东西来解析MySQL错误,你也非常紧密地耦合到你的数据库,它可能会很棘手切换到MariaDB或Postgres或其他…

将异常留给真正的异常情况,例如

  • 用户A和B几乎同时尝试注册为"Adam"
  • 你的服务器检查UserModel->usernameExists("Adam")类似的东西,它返回false在两种情况下。
  • 你的注册控制器继续两个用户的注册过程,用户A注册,但用户B收到一个异常,这实际上是异常,由于这个愚蠢的竞争条件)。

如果用户A在用户B尝试注册前两周注册,那么UserModel->usernameExists("Adam")只会为用户B返回true,您可以在注册表单中显示一个漂亮的错误—或者只是显示用户名已被占用。