下面我有一个SQL查询服务器作为登录脚本,供选择输入用户名或电子邮件的用户使用。
我注意到即使看起来它会检查其中任何一个或作为登录凭据都没有。
username1 OR username1@email.com
=只是真正按用户名查找
SELECT *
FROM tblaccount
WHERE acc_user='username1' OR acc_email='username1@email.com'
AND acc_password='letmein1' AND acc_confirmed='1' AND acc_active='1'
......如果我把它改成......
username0 OR username1@email.com
=它不会返回记录。
有什么想法吗?
答案 0 :(得分:4)
使用OR
:
SELECT * FROM tblaccount
WHERE (acc_user = 'username1' OR acc_email = 'username1@email.com' )
AND acc_password = 'letmein1'
AND acc_confirmed = '1'
AND acc_active = '1';
答案 1 :(得分:1)
Mahmoud的解决方案是正确的。您必须在mysql中读取运算符优先级。
http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html
由于OR
的优先级低于AND
,因此您必须将OR
置于括号中,如Mahmoud所提供的那样。