2013-04-08 2 views
0

Ниже у меня есть SQL-запрос, который является сервером как сценарий входа для пользователей, которые хотят либо ввести свое имя пользователя, либо адрес электронной почты.Выберите вложенный И ИЛИ. Как?

Я заметил, что, даже если кажется, что он будет проверять либо для входа, либо в качестве учетных данных для входа, нет.

username1 OR [email protected] = Только на самом деле, глядя вверх по нику

SELECT * 
FROM tblaccount 
WHERE acc_user='username1' OR acc_email='[email protected]' 
    AND acc_password='letmein1' AND acc_confirmed='1' AND acc_active='1' 

... если я изменить его ...

username0 OR [email protected] = Это не возвращает записи.

Любые мысли?

+1

'И' имеет более высокий приоритет, чем' ИЛИ'. Вы используете скобку или 'acc_user IN ('username1', '[email protected]')' –

+0

используйте скобки. И имеет приоритет над OR, поэтому второй OR выполняется с помощью AND, а затем с первым OR. – Aris

+2

Имейте в виду, что вы не должны хранить пароли в виде открытого текста. Аутентификация и безопасность довольно сложны - вам будет намного лучше использовать библиотеку, подходящую для вашего языка разработки. – halfer

ответ

4

Помещенный некоторые скобки вокруг этих условий с OR: раствор

SELECT * FROM tblaccount 
WHERE (acc_user = 'username1' OR acc_email = '[email protected]') 
    AND acc_password = 'letmein1' 
    AND acc_confirmed = '1' 
    AND acc_active = '1'; 
+1

@Vini - вам нужно добавить более подробную информацию, чтобы получить полезный ответ. Что еще вы пробовали? Какие данные у вас есть в вашей базе данных? Попытайтесь добавить всю полезную и необходимую информацию к вашему вопросу. Еще лучше покажите нам, что у вас есть с SQL Fiddle - иначе мы просто догадываемся. – halfer

+0

Нах ты был прав. Поля acc_confirmed & acc_active были установлены на 0 в то время. Огромное спасибо. – ASPiRE

1

Махмуда является правильным. Вам нужно будет прочитать приоритет оператора в mysql.

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

Как OR имеет низкий приоритет, чем AND, вы должны поставить OR в круглые скобки, как предоставил Махмуд.

Смежные вопросы