0

最近我创建了一个简单的注册表单,当我尝试保存数据时,如果我输入现有的用户名或电子邮件,我会收到一条错误消息,指出查询已停止,因为该字段已存在

在某些情况下,这是一个很棒的功能,我可以在电子邮件案例中使用它。

我不确定我是否必须在表单验证器或 config.php 或我的模块中设置它。

这是我的保存方法:

public function saveUser(User $user)
{

    $data = array(
        'username'  => $user->username,
        'email'     => $user->email,
        'password'  => $user->password,
    );

    $id = (int) $user->user_id;

    if ($id == 0) {
        $this->insert($data);
    } elseif ($this->getUser($id)) {
        $this->update(
            $data,
            array(
                'user_id' => $user_id,
            )
        );
    } else {
        throw new \Exception('Form id does not exist');
    }
}

这是一个简短的错误:

Statement could not be executed
...
QLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin' for key 'username'
....

就像我说的那样,我可以将此错误用于电子邮件,因为我想要唯一的电子邮件,但我不确定如何捕获此错误并以更好的格式显示它,可能就像一个验证错误。

关于这个问题的任何想法?

谢谢

4

3 回答 3

2

如果您使用 Zend_Form 创建表单,您可以使用Zend_Validate_Db_NoRecordExists检查电子邮件是否已经存在。

于 2012-10-11T07:05:32.367 回答
1

这是您的SQL 服务器返回的错误。要摆脱这种情况,您需要UNIQUE KEY从您的领域中删除username

至于如果用户电子邮件重复显示“不错的错误消息”,恐怕您唯一的选择就是在执行之前检查它的存在INSERT

我曾经有一个正在抛出的数据库模型,Database_UniqueKey_Exception( $field)它允许您以非常时尚的方式执行此操作,但是 AFAIK Zend 不支持对唯一关键问题的特殊处理,您必须解析错误消息(我不会去那里)或检查提前。

于 2012-10-11T06:38:46.270 回答
0

这是一个关于如何实现您想要的示例的示例。Zend Framework:验证重复的数据库条目

它使用MySQL PDOException code: 23000来检查是否发生重复条目异常并将错误消息附加到表单。这样您就不需要进行额外的数据库查询来检查重复username条目。

希望这可以帮助。

于 2013-02-02T13:19:00.390 回答