1

私の従業員のテーブルにとって、電子メールはユニークなフィールドです。新しい従業員を挿入するときは、メールの存在を確認します。すでに存在する場合は、次のエラーメッセージが表示されます。

    $selectquery ="SELECT * FROM employee WHERE empemail='$empemail'";
    $selectresult=mysql_query($selectquery) or die("query fout " . mysql_error() );
    if(mysql_num_rows($selectresult)==1)
    {
        $errormsgnewemployee = '<p id=notification>The email you entered already exists.</p>';
    }

しかし、フィールドを更新するときにそれを行うにはどうすればよいですか?(メールを変更せずに)従業員のデータを更新すると、メールがすでに存在するため、更新できません。私が考えることができるのは、最初にUPDATEを実行し、次に2つのレコードがあるかどうかを確認し、2つある場合は、以前と同じように更新することです。

これは良いアプローチですか、それともより良い解決策がありますか?

編集

unique index私自身の解決策は、テーブル上にがあり、クエリエラーを使用してテーブルを更新することです。

    if (mysql_error())
            {
                $errormsgnewemployee = '<p id=notification>Update failed. Please check if the email you entered already exists.</p>';
            }

なぜなら、それが唯一の一意のフィールドではない場合、なぜユーザーはエラーを起こすのでしょうか?他のすべての場合、更新は成功します。

4

2 に答える 2

4

INSERT ... ON DUPLICATE UPDATE ...SQL構文を使用することをお勧めします。マニュアルを詳しく見てください。

したがって、クエリは次のようになります。

INSERT INTO employee (email, first_name, last_name, ...) 
VALUES ('employee_email@example.com', 'nik', 'smtih', ...) 
ON DUPLICATE UPDATE 
    first_name = 'nik', 
    last_name = 'smith', 
    ...

このクエリの一部は制約のINSERTために失敗することに注意してください。そのため、クエリの2番目の部分である、が実行され、挿入する代わりにデータが更新されます。UNIQUE KEYON DUPLICATE UPDATE

于 2012-12-10T09:38:23.453 に答える
4

同じソリューションを使用できます。「このメールアドレスを取得しますが、私のアドレスは取得しません」だけで、他のユーザーがそれを使用しているかどうかを確認できます。

例えば。更新する前に、次のようにします。

SELECT 1 FROM employee WHERE empemail = '$empemail' AND id != '$myid';

メールが他の誰かに属している行のみを返す必要があります。

ちなみに、そのようなSQLクエリへの変数の補間には潜在的なセキュリティの問題があります-あなたはそれをすべきではありません。また、非推奨になっているmysql_ *関数は、PDOまたはmysqliの代替機能に置き換える必要があります。

于 2012-12-10T09:38:53.127 に答える