首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查PHP中的异常

问如何检查PHP中的异常
EN

Stack Overflow用户
提问于 2014-03-22 22:04:25
回答 1查看 41关注 0票数 0

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

如果exception是MySQL中的重复记录异常,则echo "User Already exists";

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

代码语言:javascript
复制
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";

}
EN

回答 1

Stack Overflow用户

发布于 2014-03-22 22:15:45

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

例如,如果您突然决定向表中添加一个id字段并将其设置为主键,您的算法将会崩溃。如果您通过识别错误号或其他方法来解析MySQL错误,那么您与数据库的耦合也非常紧密,因此切换到MariaDB或Postgres或其他任何格式可能会很棘手……

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22578589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档