0

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

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

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

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

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

现在问题在于重复性。

我发现它是重复的,我有这样的错误字符串

密钥“电子邮件”的重复条目“test@gest.com”或密钥“用户名”的重复条目“测试”

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

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

键 2 的重复条目“test@gest.com”或键 3 的重复条目“测试”

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

**

那么,如果表中有更多唯一字段,还有其他方法可以获取哪个字段重复。

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

4

3 回答 3

1

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

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

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

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

于 2010-07-30T11:47:54.297 回答
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 喜欢SELECT username, email FROM database WHERe username=? OR email=?并检查响应。如果没有,则没有重复。

于 2010-08-16T11:18:39.937 回答
0

只需使用 Select Count(*) From TableName where Condition='yourtestcondition'。如果你得到 count > 0 那么它存在,否则不存在。

于 2010-07-30T11:41:33.840 回答