对于我员工的表格,电子邮件是一个独特的字段。当我插入新员工时,我会检查电子邮件是否存在。如果它已存在,则会收到错误消息:
$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 :(得分: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替代品。