如何找到哪个字段是重复的

时间:2010-07-30 11:37:21

标签: mysql mysql-error-1062

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

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

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

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

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

现在问题在于重复。

我发现它是dupilcate,我有像这样的错误字符串

  

重复输入'test@gest.com'   键'电子邮件'或重复条目   '测试'关键'用户名'

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

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

  

重复输入'test@gest.com'   密钥2'或重复条目'测试'   对于关键3

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

**

  

还有其他任何方法可以获得它   如果有更多,则字段重复   表中的独特字段。

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

3 个答案:

答案 0 :(得分:1)

您可以使用实际值(some@email.com或some_username)对errorstring执行strpos()

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

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

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

答案 1 :(得分:0)

只需使用TableName中的Select Count(*),其中Condition ='yourtestcondition'。如果你有数数> 0然后它不存在。

答案 2 :(得分:0)

第一件事 - 我在您的查询中看到另一个问题 - 您提到1064(查询字符串错误)。 这意味着您可能有错误的查询语法。 这意味着您可能无法充分过滤用户值。如果服务器安全性不正确,则会发生此错误(AFAIK)。与使用两个SQL而不是一个SQL相比,这将导致更多问题。检查是否正确转义输入参数。您还应该使用参数绑定:

$stmt = mysqli_prepare($link, "INSERT INTO XXX (username, email) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'ss', $user, $email);

更多内容见mysql页面http://pl.php.net/manual/en/mysqli-stmt.bind-param.php

关于你的错误:

抱歉,但是没有办法(至少我不知道)达到你想要的效果。不要对插入的查询号这么挑剔。这不像你每秒会有数千个用户注册,所以另一个查询不会真的受到伤害。

问题是,你真的不知道错误信息是什么。这主要取决于服务器配置。您可以使用其他语言等提供错误消息。

真的,只需像SELECT username, email FROM database WHERe username=? OR email=?那样进行SELECT并检查响应。如果没有,则没有重复。