Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> WHERE field = 0 !?, Rekord nie powinien zostać zwrócony, a jednak...
kartun11
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


Witam,
mam cholernie dziwny problem z pewnym zapytaniem...

  1. SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = 0 LIMIT 1

Zwraca mi rekord z bazy, problem w tym, że pole user_sid ma wartość, jest nią suma md5.

Tak samo z innym zapytaniem...
  1. SELECT * FROM (`ZAT_Users`) WHERE `user_email` = 0 LIMIT 1

Też zwraca wynik, ale w polu jest adres email, a nie 0...

Gdy jednak wykonuję
  1. SELECT * FROM (`ZAT_Users`) WHERE `user_email_hash` = 0 LIMIT 1

Nie ma żadnego rekordu. A pole identyczny typ jak pole user_sid, też zawiera sumę md5.

Nigdy się z czymś takim nie spotkałem i nie mam pojęcia co może być nie tak.

Pola zostały stworzone tym zapytaniem
  1. ...
  2. user_sid VARCHAR(32) COLLATE utf8_general_ci NOT NULL
  3. ...


Oczywiście wyniki zwracane są prawidłowo, gdy potraktuję 0 jako string, ale dlaczego wyniki są zwracana w innym wypadku.

Ten post edytował kartun11 30.09.2010, 11:44:32
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Bo to jest pole tekstowe wiec nalezy je przyrownywac do tekstu a nie liczby....
SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = '0' LIMIT 1


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wookieb
post
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




1) Podaj wersję mysql
2) Jeżeli jest to mała tabela daj nam ją w formie zapytania (eksport w phpmyadmin) - tylko ukryj wrażliwe dane


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Oczywiście wyniki zwracane są prawidłowo, gdy potraktuję 0 jako string, ale dlaczego wyniki są zwracana w innym wypadku.
Bo nie mozna porownac tekstu do liczby. Mysql wiec rzutuje twoje pole tekstowe na liczbę. A tekst po zrzutowaniu na liczbe to 0 wiec porównujesz 0 z 0 wiec masz true smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kartun11
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 30.09.2010, 12:44:22 ) *
Bo to jest pole tekstowe wiec nalezy je przyrownywac do tekstu a nie liczby....
SELECT * FROM (`ZAT_Users`) WHERE `user_sid` = '0' LIMIT 1


Ale w drugim przypadku gdy operowałem na takim samym typie pola, wartości nie zwróciło mimo przyrównania do liczby 0.

Wersja MySQL to 5.0.45.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale w drugim przypadku gdy operowałem na takim samym typie pola, wartości nie zwróciło mimo przyrównania do liczby 0.
Ale tam miales hasha, a hash pewnie wygladal mniej wiecej tak:
12blabla
pierwsze znaki to liczby. Konwersja takiego tekstu da ci 12 a 12 to nie jest 0 wiec dalo ci false.
smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kartun11
post
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 2
Dołączył: 22.07.2007

Ostrzeżenie: (0%)
-----


Ah, więc chodziło o sposób w jaki MySQL przechodzi między typami danych. Nie miałem pojęcia, że jest to realizowane w taki sposób.
Aż wstyd się przyznać, że SQL znam od kilku lat ^^"
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W identyczny sposób działa to w php
'aa' == 0 //true
'12aaa' == 0 //false


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 22:52