2012-03-30 16 views
6

dlaczego select 'aaa' =0 powrót 1 (TRUE) jeśli mam tabeli jakmysql powrót konwersja ciąg 0

userid | pass 

user1 | pas1 

jeśli kwerendy:

select from table where userid = 0 and pass =0 

daje mi wszystkie wiersze?

Odpowiedz

10

MySQL widzi 'aaa' = 0 i myśli sobie: "I może też konwertować aaa do liczby całkowitej, lub od 0 do łańcucha"

Zgadnij, z którym idzie?

zasadzie to, co się dzieje jest to, że „aaa” jest konwersja do liczby całkowitej, a jak to nie jest liczbą całkowitą, to rzuca na 0.

0 = 0 jest oczywiście prawdą (lub prawdziwe == 1) .

Podejrzewam, że to samo dzieje się z twoją kolumną userid, choć nie znając jej wartości/typu danych, trudno powiedzieć.

http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

+0

bardzo ładnie wyjaśnione –

+0

mnie uprzedził :) –