我在我的用户表列(电子邮件,用户名)上设置了两个唯一索引,但是当我尝试使用已接收的电子邮件和用户名注册新用户时,它会按预期显示异常。但是,它只是在电子邮件列中显示异常,而不是用户名:
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 ...所以我正在捕获错误代码。但我不知道在任何给定的情况下哪个列是问题(“使用电子邮件地址”或“用户名”?)
在验证期间,我是否需要为每个先前的查询执行单独的查询?如果我只有一个唯一索引(例如只有电子邮件),那么我可以依赖异常中的代码,但如果我有两个......
答案 0 :(得分:1)
在插入数据库之前只需进行验证。检查指定值是否存在的查询非常便宜,所以不要害怕。
数据库约束将是额外的保护。