2012-12-10 152 views
0

对于我的员工表,电子邮件是一个独特的领域。当我插入新员工时,我会检查电子邮件的存在。如果它已经存在,您会收到一条错误消息:PHP MYSQL如何检查UPDATING时记录是否已经存在?

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

因为,否则为什么用户有错误,如果它不是唯一唯一的领域?在所有其他情况下,更新会成功。

+0

为什么不在表单中传递参数,无论是“$ action = UPDATE”还是“INSERT”? – Touki

+0

那不是问题Touki,它是关于如何编写UPDATE问题的检查,不返回数据库错误,但我自己的文本。我正在尝试使用捕获错误号的解决方案,查找语法等。 –

+0

** Heads up!** PHP的未来版本是*弃用和删除mysql_'系列函数。现在将是[切换到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli)的好时机。 – Charles

回答

3

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

例如,更新前,做这样的事情:

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

应该只返回在电子邮件属于别人的行。

在附注中,将变量插入到SQL查询中存在潜在的安全问题 - 您不应该这样做。而且mysql_ *函数被弃用,应该用PDO或mysqli替代替换。

+0

非常感谢。有用。 –

3

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

所以,你的查询可以是以下几点:

INSERT INTO employee (email, first_name, last_name, ...) 
VALUES ('[email protected]', 'nik', 'smtih', ...) 
ON DUPLICATE UPDATE 
    first_name = 'nik', 
    last_name = 'smith', 
    ... 

注重这个查询的INSERT部分将失败的原因UNIQUE KEY约束,这也就是为什么查询,ON DUPLICATE UPDATE的第二部分,将被执行,数据将被更新而不是插入。

+0

谢谢,这真的很有用。但是,我现在怎么能让用户知道它何时更新成功,以及何时更新,除了电子邮件,例如 –

相关问题