2014-04-29 21 views
0

重复条目'[email protected]“这是我的表MySQL错误:关键3

enter image description here

这是我的PHP查询代码

// Check for unique username 
    $quser = "SELECT user_id FROM users 
     WHERE (username = '$u' AND email = 'e') 
      "; 

    $ruser = mysqli_query($dbc, $quser) or die("MySQL error: " . mysqli_error($dbc) . "<hr>\nQuery: $quser"); 

if(mysqli_num_rows($ruser) == 0){ 

//do the INSERT INTO query 
$q = " INSERT INTO users (lang_id, username, pass, email, active, registration_date) 
       VALUES ('$l','$u', SHA1('$p'), '$e', '$a', NOW()) 
      "; 

}else{ 

echo 'That email address has already been registered.'; 
} 

当我通过测试将重复的电子邮件地址输入到HTML表单中(假设表单验证是好的),则返回错误,如下所示:

MySQL error: Duplicate entry '[email protected] ' for key 3 
--------------------------------------------------------- 
Query: SELECT user_id FROM users WHERE (username = 'dsfdsf' AND email = 'e') 

当然,价值尚未输入表格。

这是我一直在努力解决办法:

1 /我取消了用户名和电子邮件的唯一索引,数据被插入,但仍然复制,这是我从来没有期望。

2 /我尝试重复的用户名,但不是电子邮件,同样的错误返回。

现在我脑海中的问题是为什么它不返回我自定义的错误信息,如在其他部分,但由服务器生成的?

你能帮忙吗?由于

+0

你有没有注意到'或者死亡(“MySQL error:”''你的代码中的部分是偶然的? –

+0

是的,我做过了,但是没有成功 –

回答

0
$ruser = mysqli_query($dbc, " SELECT * user_id FROM users 
WHERE username like '$u' or email like '$e' "); 

在SELECT查询电子邮件应该是$ E和不只是Ë

尝试

$res=mysql_query("select * from users 
where username like '$u' or email like '$e' "); 

if(mysql_num_rows($res)==0) 
mysql_query(" insert into users 
(lang_id, username, pass, email, active,registration_date) values 
('$l','$u','$p','$e','$a',NOW()) "); 

else 
echo "Duplicate entry"; 

这可能是错误
呵呵问题是,你有user_id说明在你的表中作为主要的,它应该不是null,即使user_level不能为NULL,因此每次插入一个新行时,都应该为user_id和user_level插入一个值。

mysql_query(" insert into users 
(lang_id, username, pass, email, active,registration_date,user_id,user_level) 
values('$l','$u','$p','$e','$a',NOW(),$userid,'$user_level') "); 

希望这能解决你的问题

+0

这也不会捕获只有用户名或电子邮件是重复的 – frlan

+0

哦,我没有更改查询那么多,只是看到了错误和张贴,感谢您的评论! – Aamir

+0

我已更正e到$ e,但没有suceed;并将NAD更改为OR.仍然出现相同的错误 –

1

换款的请求

$quser = "SELECT user_id FROM users 
     WHERE username = '$u' 
      or email = '$e' 
      "; 

应该做的伎俩。 您错过了电子邮件的$以及此查询只返回值,如果两者都设置...所以只有重复的电子邮件或重复的用户名不会被捕获。

也许你可以通过一些异常处理来捕捉这些类型的错误,以避免计时错误(2个进程同时插入数据)。

+0

Kudos!解决! –