2012-01-30 5 views
1

私は奇妙な問題を抱えていました。私たちのウェブサイトには、zendフォームを使ってコーディングされた登録フォームがあります。ユーザー名が存在するかどうかは、zend db insertオペレーションの前にデータベースにチェックされています。 10秒または20秒の差であっても、重複が自動的に記憶されている(推測する)レコードはほとんどない(約100件)。自動インクリメント列以外の異なる値でフォームを再提出する可能性はない。zend formは、 "username"ユーザフィールドに重複したエントリを挿入します。

+0

そうでない場合は私たちにできることすべては推測です、ログインフォームおよび登録プロセスに関連するすべてのコードを投稿してください。 – drew010

+0

こんにちは、サンプルコードを投稿して申し訳ありませんが、一部のユーザーのみに何が起こるかを推測したいと思いますか? – Guru

答えて

3

状況はかなりシンプルで、「レース」と呼ばれています。

 
1. User1 submit form (email: [email protected]) 
2. User2 submit form (email: [email protected]) 
3. verify no [email protected] for User1 
4. verify no [email protected] for User2 
- before nither of them added there is no [email protected] in DB 
5. Add to db User1 
6. Add to db User2 
- you have got an duplication error. 

ソリューション:

 
1. unique index to filed email 
2. transaction (started from verification email exist up to insert a new record) 
+0

すばらしい答え! – Phil

+0

実際にあなたは正しいですが、まだ私はデータベースに保存する前に、既存のものかどうかをチェックしています。 – Guru

+0

そして、同じロジックでuser1とuser2を入力することは不可能です。私のロジックに従って再び挿入する機会はありませんが、ユニークなキーを作ることは一つの解決策です。 – Guru

関連する問題