PHP MYSQL UPDATING时如何检查记录是否已经存在?

时间:2012-12-10 09:30:10

标签: php mysql sql-update exists

对于我员工的表格,电子邮件是一个独特的字段。当我插入新员工时,我会检查电子邮件是否存在。如果它已存在,则会收到错误消息:

    $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>';
    }

但是在更新字段时如何做到这一点?因为如果我更新员工数据(不更改他的邮件),它就不会让我,因为电子邮件已经存在。所有我能想到的是首先更新,然后检查是否有2条记录,如果有2条记录,则按原样更新回来。

这是一个好方法还是有更好的解决方案?

修改

我自己的解决方案是在表上更新表unique index并使用查询错误:

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

因为,如果不是唯一的唯一字段,为什么用户会有错误?在所有其他情况下,更新将成功。

2 个答案:

答案 0 :(得分:4)

我建议你使用INSERT ... ON DUPLICATE UPDATE ... sql构造。深入了解manual

所以您的查询可能如下:

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部分此查询会因UNIQUE KEY约束而失败,这就是为什么查询的第二部分ON DUPLICATE UPDATE将被执行且数据将会更新而不是插入。

答案 1 :(得分:4)

您可以使用相同的解决方案,只需“获取此电子邮件地址,但不是我的”,以检查是否有其他用户使用它。

EG。在更新之前,请执行以下操作:

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

只应返回电子邮件属于其他人的行。

另一方面,将变量插入到SQL查询中会存在潜在的安全问题 - 您不应该这样做。不推荐使用的mysql_ *函数应替换为PDO或mysqli替代品。