如何正常显示数据库错误? (例如SQLSTATE [23000]:...)

时间:2014-12-09 14:42:04

标签: php mysql validation

我在我的用户表列(电子邮件,用户名)上设置了两个唯一索引,但是当我尝试使用已接收的电子邮件和用户名注册新用户时,它会按预期显示异常。但是,它只是在电子邮件列中显示异常,而不是用户名:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'martynbissett@yahoo.co.uk' for key 'email_2'

在我的代码中,我尝试过这样的事情:

try {

    // attempt to save

} catch(\Exception $e) {

    switch($e->getCode()) {
        case 23000:

            $this->flash->error('Email(?) address already taken'); // or is it username?
            break;

        default:
            $this->flash->error($e->getMessage());
    }
}

此外,您可以看到我想要提供比SQLSTATE [23000]更好的错误消息:Integrity const ...所以我正在捕获错误代码。但我不知道在任何给定的情况下哪个列是问题(“使用电子邮件地址”或“用户名”?)

在验证期间,我是否需要为每个先前的查询执行单独的查询?如果我只有一个唯一索引(例如只有电子邮件),那么我可以依赖异常中的代码,但如果我有两个......

1 个答案:

答案 0 :(得分:1)

在插入数据库之前只需进行验证。检查指定值是否存在的查询非常便宜,所以不要害怕。

数据库约束将是额外的保护。