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 に答える