2009-08-18 9 views
5

Używam MySQL i PHP. W mojej bazy danych mam tej tabeli o nazwie users, a wewnątrz stołu users mieć zapis:Czy w PHP nie jest rozróżniana wielkość liter?

Nazwa użytkownika: Administrator

hasło: hasło

w moją stronę logowania, Próbowałem zalogować się jako (Hasło:):

  • nazwa użytkownika: admin -> wynik: Możesz zalogować
  • login: admin -> wynik: Możesz zalogować

Przechowuję nazwę użytkownika w mojej bazie danych jako "admin", wszystkie małe litery.

Na mojej stronie uwierzytelniania PHP nie dodałem funkcji strtolower(). Czy to znaczy, że w PHP pole formularza nazwy użytkownika, które przesłałem, nie jest rozróżniane?

Odpowiedz

11

To nie jest PHP. W zapytaniu do bazy danych nie jest rozróżniana wielkość liter.

Można wprowadzić jeden z łańcuchów binarnych z operandami. Na przykład:

SELECT 'abc' LIKE 'ABC'; 

ten powróci 1 lub true. Choć

SELECT 'abc' LIKE BINARY 'ABC'; 

powróci 0 lub false.

+5

Tak, MySQL domyślnie nie rozróżnia wielkości liter. – TheJacobTaylor

+0

Huh ?? Czy możesz wyjaśnić więcej? Mój aktualny skrypt: SELECT * FROM users WHERE nazwa_użytkownika = "" .mysql_real_escape_string ($ _ POST ['username']). "'"; –

+0

Jak zrobić to sensit? –

0

Skąd wiadomo, że to pole formularza użytkownika?

Jeśli dobrze pamiętam, w * nix nazwa użytkownika nie uwzględniała wielkości liter. Czy używasz biblioteki do przechowywania informacji o użytkowniku i do porównania?

+0

i przesłać nazwę użytkownika w 2 wersjach, 1 we wszystkich wielkich liter, 1 we wszystkich małych liter, obie mogą się zalogować. Nie, nie użyłem żadnej biblioteki, tylko prosty formularz logowania, który sam utworzyłem. –

-1

Gdy jesteś zalogowany, myślę, że powinieneś napisać zapytanie, aby potwierdzić nazwę użytkownika i hasło są takie same w tabeli, która została zapisana.

+0

Moja tabela zapisała nazwę użytkownika jako "admin" (wszystkie małe litery), to znaczy, w php, muszę użyć strtolower() do konwersji al l ciąg znaków na małe litery. Czy o to Ci chodziło? Opierając się na odpowiedzi Randella, jego wielkość nie ma znaczenia, dlaczego więc powinienem ponownie użyć strtolower()? Jakie są przyczyny, jeśli nie używam funkcji strtolower()? Czy możesz rozwinąć więcej, proszę? –

+0

Twoja odpowiedź została odrzucona, czy to znaczy, że nie muszę konwertować ciągu na małe litery? –

+0

Proszę nie używać formatowania kodu podczas pisania tekstu. – slaphappy

1

myślę mają wiele do zrobienia, zanim będzie jasne ...

MySQL nie jest uwzględniana wielkość liter dla zapytań. WYBIERZ i wybierz oznacza to samo.

Dane w tabelach są przechowywane w niezmienionej postaci, ale ponieważ można uzyskać tylko informacje za pomocą zapytań, należy je ostrożnie sformułować.

Jak Randell powiedział

select 'abc' like 'ABC' 

zwróci true (tak będzie SELECT 'abc' like 'ABC') bo jak ignoruje różnice przypadków

select 'abc' like binary 'ABC' 

zwróci FAŁSZ (i tak będzie SELECT 'abc' LIKE BINARY 'ABC') bo jak BINARY wygląda bardziej ostrożnie.Na poziomie binarnym istnieje różnica.

Powiązane problemy