这是我的表
这是我的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@domain.com ' for key 3
---------------------------------------------------------
Query: SELECT user_id FROM users WHERE (username = 'dsfdsf' AND email = 'e')
当然,该值尚未输入表中。
这些是我一直在尝试的解决方案:
1 /我删除了用户名和电子邮件的唯一索引,数据被插入,但仍然重复,这是我从未预料到的。
2 /我尝试了重复的用户名,但不是电子邮件,同样的错误会返回。
我现在的问题是,为什么它不会返回我自定义的错误消息,如}} {部分,但服务器生成的那个?
你能帮忙吗?感谢答案 0 :(得分:1)
将您的请求更改为
$quser = "SELECT user_id FROM users
WHERE username = '$u'
or email = '$e'
";
应该做的伎俩。
您错过了$
电子邮件以及此查询仅返回值(如果两者都已设置...)因此不会捕获重复的电子邮件或重复的用户名。
也许你可以通过一些异常处理来捕获这些错误,以避免计时运气不好(2个进程同时插入数据)。
答案 1 :(得分:0)
$ruser = mysqli_query($dbc, " SELECT * user_id FROM users
WHERE username like '$u' or email like '$e' ");
选择查询电子邮件中的应该是$ e而不仅仅是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') ");
希望这能解决您的问题