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

但是在更新字段时该怎么做呢?因为如果我更新员工数据(不更改他的邮件),它不会让我,因为电子邮件已经存在。我能想到的就是先更新,然后检查是否有 2 条记录,如果有 2 条,则像以前一样更新它。

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

编辑

我自己的解决方案是更新在表上有 aunique 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此查询的一部分将由于UNIQUE KEY约束而失败,这就是为什么查询的第二部分ON 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 回答