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

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

但是在UPDATING一个字段的时候怎么办呢?因为如果我更新员工数据(不更改他的邮件),它不会让我,因为电子邮件已经存在。我能想到的就是先更新,然后检查是否有 2 条记录,如果有 2 条,则将其更新回原来的状态。

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

编辑

我自己的解决方案是更新表上有一个唯一索引并使用查询错误的表:

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

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

最佳答案

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

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

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

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

附带说明一下,像这样将变量插入到 SQL 查询中存在潜在的安全问题 - 您不应该这样做。并且 mysql_* 函数已被弃用,应替换为 PDO 或 mysqli 替代品。

关于PHP MYSQL 如何在更新时检查记录是否已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798155/

相关文章:

php - Yii url 规则带斜线

php - 为什么我的 Joomla! 2.5 扩展安装内容从 admin 目录到 joomla 而不是从 site 目录? (可下载代码)

php - PHP 中列的总和

php - 具有多个子查询的 MySQL 查询,每个子查询具有不同的连接类型

mysql 用 php column1 SET = array[0][0] 更新?

php - 在 PHP 中从数组中删除一个元素

php - 尝试从mysql中的while循环(php)插入数据

mysql - SQL - 按列 1 分组,按列 2 排序

R - 合并和更新主数据集

sql-server-2008 - SQL Server - 根据另一列值更新列