如何处理重复条目的错误?
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:当我插入数据时出现重复键错误,我该如何处理这个错误?