如何处理重复条目的错误?

Posted

技术标签:

【中文标题】如何处理重复条目的错误?【英文标题】:How to handle error for duplicate entries? 【发布时间】:2011-03-09 23:28:02 【问题描述】:

我有一个 php 表单,可以将数据输入到我的 mysql 数据库中。我的主键是用户输入的值之一。当用户输入表中已经存在的值时,返回 MySQL 错误“Duplicate entry 'entered value' for key 1”。 而不是那个错误,我想提醒用户他们需要输入不同的值。只是回显的消息或其他内容。

如何将特定的 MySQL 错误转换为 PHP 消息?

【问题讨论】:

【参考方案1】:

要检查此特定错误,您需要找到error code。重复键为1062。然后使用来自errno() 的结果与:

mysqli_query('INSERT INTO ...');
if (mysqli_errno() == 1062) 
    print 'no way!';

关于编程风格的说明 您应该始终避免使用 magic numbers (我知道,我是在这个答案中介绍它的人)。相反,您可以将已知错误代码 (1062) 分配给一个常量(例如 MYSQLI_CODE_DUPLICATE_KEY)。这将使您的代码更容易维护,因为 if 语句中的条件在几个月后仍然可读,而 1062 的含义已经从记忆中消失了:)

【讨论】:

是的,我也发现了 :D 我把它插上电源,它工作得很好。谢谢 jensgram,正是我正在寻找的解决方案! @jensgram:+1 感谢您提供非常有用的答案和提示。我只是为那些使用 PDO 的人添加这个链接:php.net/manual/en/pdo.errorcode.php 对于 OOP,它是 $mysqli->errno 找出错误号:echo mysqli_errno($link); //其中链接是您的数据库连接。 你为什么要花一些时间来指导读者使用常量,而不是仅仅(或至少除了)将它应用到你的代码 sn-p 中?【参考方案2】:

您可以在插入时检查来自mysql_query 的返回值。

$result = mysql_query("INSERT INTO mytable VALUES ('dupe')");

if (!$result) 
    echo "Enter a different value";
 else 
    echo "Save successful.";

【讨论】:

啊哈,我以前见过这个,这绝对是正确的。谢谢尼克! 其实有什么方法可以检查是不是具体的错误? 是的 - mysql_errno() 将返回最后一个错误的错误代码。在我的脑海中,我不知道那个代码是什么,但你可以在 (!$result) 分支中检查它。 mysql_errno() 的 OOP 等效项是 $mysqli->errno【参考方案3】:

尝试使用此代码处理重复条目并显示回显消息:

  $query = "INSERT INTO ".$table_name." ".$insertdata;
                if(mysqli_query($conn,$query))
                    echo "data inserted into DB<br>";                   
                else
                   if(mysqli_errno($conn) == 1062)
                       echo "duplicate entry no need to insert into DB<br>";
                   else
                    echo "db insertion error:".$query."<br>";

                //else end

【讨论】:

【参考方案4】:

带有mysql_error()函数 http://php.net/manual/en/function.mysql-error.php

【讨论】:

这只是打开错误报告,据我所知。无论如何,谢谢。【参考方案5】:

使用mysql_errno() 函数,它返回错误号。重复键的错误号是 1062。 例如

$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062)
    echo 'Duplicate key';

【讨论】:

【参考方案6】:

这是我使用的完整代码,并且运行良好。它的 PDO 友好,并且可以轻松处理您的错误,(一旦您使用 die 发现那是什么。然后您可以从那里复制错误消息,并将其包含在 if 中。这来自我想要的注册页面如果找到主键(电子邮件)并产生错误,则重定向到登录页面。

function insertUserDetails($email, $conn)

  try 
      $query = $conn->prepare ("INSERT INTO users (emailaddress) VALUES (:email)");
            $query ->bindValue('email', $email);
            $query->execute();
        
  catch (PDOException $e) 

      if(str_contains($e, '1062 Duplicate entry')) 
          header("Location: login.php");

      
          die("Error inserting user details into database: " .  $e->getMessage());

  

【讨论】:

以上是关于如何处理重复条目的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理数据透视表和电源查询中的重复条目以填充到 excel 仪表板中

系统学习消息队列分享(七) 如何处理消费过程中的重复消息?

Codeigniter:当我插入数据时出现重复键错误,我该如何处理这个错误?

如何在 tkinter GUI 位于同一文件中的情况下运行 python 脚本?您如何处理用户条目?

如何处理重复的唯一索引错误?

React - 如何处理图像/文件的 403 错误 [重复]