2016-04-11 15 views
1

私はウェブサイト用のサインアップシステムを作成しています。 MySQLデータベースには独自のフィールドがあり、ユーザーは同じ電子メール、ユーザー名、または電話番号で複数のアカウントを作成することはできません。データが複製されると、mysqli_error()を使用してエラーが返されます。キー 'EMAIL'のエントリ '[email protected]'が重複しています。これにはエラーコード1062があります。次に、ユーザーに別のメールアドレス、ユーザー名、または電話番号を入力して返信します。この場合の列のKEYが必要です。「EMAIL」は、エラーを返信する際にこれを行う方法があります。 お礼をPHP MySQLエラーからカラムキーを取得する方法はありますか

+0

廃止予定の機能を使用しないでください。 – rray

+1

mysqli_error()関数を削除してください(私のヒント:これはデバッグにのみ使用し、公開では使用しません)。このメッセージは攻撃者にあなたのシステムが脆弱であることを知らせます。このエラーは、**電子メールを**プライマリキー**として使用することによって発生しました。.. – Jer

+0

"select *"私は絶対に私を狂わせます。絶対に使用しないでください。これは怠け者であり、特にワイドテーブルで必要以上に多くのデータを返すだけでなく、問題を引き起こします。 –

答えて

0

あなたは、このように挿入する前にチェッククエリを取得する必要があります:

SELECT * FROM TABLE WHERE email = '$email' OR phone = '$phone' OR username = '$username' 

その後、あなたは簡単なチェックを行い、例外/エラーをスローすることができます。

0

検証ルールを追加する必要があります。データベースに保存する前に、一意性に関する電子メール、電話、およびユーザー名を確認してください。

select * from users where email = ? 
select * from users where phone = ? 

行が存在する場合 - ユーザーにメッセージを書き込みます。それ以外の場合は新しい行を作成します。

また、電話とユーザー名にはユニークインデックスが必要です。遅い照会を避けるために大きなテーブル(100k +行)が必要な場合は必要です。

0

あなたは検証ルールを追加する必要があります。データベースに保存する前に、一意にメール電話ユーザ名をご確認ください。

select * from users where email = ? 
select * from users where phone = ? 

行が存在する場合 - ユーザーにメッセージを書き込みます。それ以外の場合は新しい行を作成します。

また、電話とユーザー名にはユニークインデックスが必要です。遅い照会を避けるために大きなテーブル(100k +行)が必要な場合は必要です。

+2

これは以下の答えと全く同じです。 – Jer