mysql - 如何查找哪个字段重复

标签 mysql mysql-error-1062

我的表有四个字段,其中两个字段是唯一的。 例如,它们是用户名和电子邮件。 人们在前端注册。 我使用ajax动态显示他们的注册结果。

我正在执行单个插入查询。 如果有错误,那么我使用错误号来查找它是 1062(重复条目)还是 1064(查询字符串错误),否则用户已成功注册。

如果用户无法注册,那么我会以用户友好的方式显示原因。 如果存在重复项,那么我必须显示用户名已存在或电子邮件已存在。

这里的要点是我不想使用选择查询来查看用户名或电子邮件是否已存在,如果不存在则执行插入查询。

如果我像上面那样做,则必须执行两个查询。 我只想运行一个查询,并在错误号和错误消息的帮助下,我想向用户准确显示错误类型。

现在的问题是重复。

我发现它是重复的,并且我的错误字符串如下

Duplicate entry 'test@gest.com' for key 'email' or Duplicate entry 'testing' for key 'username'

我想到使用 strpos 来查找字段名称,以便我可以向用户显示电子邮件已存在或用户名已存在。

但在某些服务器中我会这样

Duplicate entry 'test@gest.com' for key 2' or Duplicate entry 'testing' for key 3

在这种情况下,我需要做一个正则表达式来提取最后一部分,如果它是一个字符串,我将做一个 strcmp 来确定哪个字段是重复的,我将相应地向用户显示错误,或者它是一个数字我需要一个简单的 switch 语句来确定哪个字段有重复项。

**

So is there any other way to get which field is duplicate if there are more unique fields in the table.

** 或者如果没有,那么我只是想把这个问题摆在人们的脑海中,这样如果他们已经为此做了一个噱头,那么他们可以在这里分享,这样像我这样的人就会受益。 谢谢。

最佳答案

您可以使用实际值(some@email.com 或 some_username)对错误字符串执行 strpos()

编辑:
您也可以问问自己是否真的有必要这样做。还有其他方法:

  • 告诉用户用户名和/或电子邮件已存在
  • 在适当的输入字段上检查 onblur()

这样你就可以完全避免这个问题。

关于mysql - 如何查找哪个字段重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3371053/

相关文章:

mysql - 选择已售出和未售出的产品

php - 从单选按钮内部检索查询结果

php - 在对两个表执行 JOIN 的查询中使用 MySQL 中的 GROUP BY 时出现问题

mysql - #1062 - key '' 的重复条目 'primary'

MySQL唯一键似乎只取varchar的前17个字符

mysql - 在 Laravel 中将 sql 案例应用于全选

php - 当第一个表中存在特殊字符时,MySQL SELECT 然后保存或更新到不同的表。 left_my_text_alone();

php - 在 php 中放置一个表格,第一行

mysql - 使用 select : ! 插入 #1062 - key '222-104276' 的重复条目 'cry_id'

PHP do/while 准备语句失败