• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Polecenie SQL zwraca nie pożądany rezultat. Dlaczego ? Błąd ?

Object Storage Arubacloud
0 głosów
1,407 wizyt
pytanie zadane 3 września 2015 w SQL, bazy danych przez Michał Początkujący (260 p.)

Witam, 

Mam problem z prostym zapytaniem SQL 

Nie rozumiem dlaczego nie uzyskuje takiego wyniku zapytania jakiego bym się spodziewał.

A minowicie baza wygląda tak:

 

Kiedy wpisuje zapytanie SQL:

SELECT ID FROM `uzytkownicy` WHERE ID =34

pokazuje mi się taki rezultat

i ok znalazł o co pytałem, ALE jak chce aby wszystkał uzytkownikow po loginie

korzystająć z takiego zapytania SQL:

SELECT `login` FROM `uzytkownicy` WHERE login='kasia'

otrzymałem reultat: " MySQL zwrócił pusty wynik (zero wierszy). "

Jak to przecież w bazie mam aż 3 kasie ? 

I w tym problem bo takim zapytaniem chciałem sprawdzić czy użytkownik o takim loginie już w bazie istnieje by napisać system rejestracji w PHP - analogicznie do kursu video PHP2.

Bo okazuje się, że gdy w PHP napisałem sobie coś takiego: 

if ($rezultat_zap1 = @$polaczenie->query(             
        sprintf("SELECT * FROM uzytkownicy WHERE login='%s' ",
        mysqli_real_escape_string($polaczenie,$login)))) 
        {    
                $ilu_userow = $rezultat_zap1->num_rows; // sprawdzamy ile wynikow(rekordow) zwrca baza

               if($ilu_userow ==0 ) // jeśli == 0 tzn ze taki login jest wolny
                {

                          // Dalsze instrukcje

 

To okazuje się że  $rezultat_zap1->num_rows zawsze mi daje 0 pomimo, że nie powinno (jak sądze) i Tak oto tym sposobem mam trzy kasie w bazie danych. 

Proszę uświadomcie mnie co tu jest nie tak lub czego nie rozumie.

Z góry serdecznie dziękuje za poświęconą przez was uwagę...

 

 

 

 

 

4 odpowiedzi

+2 głosów
odpowiedź 3 września 2015 przez jeremus Maniak (59,720 p.)
możliwe że kasia ma na końcu jakies spacje

spróbuj :

select * from uzytkownicy where login like '%kasia%'
komentarz 3 września 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
Są trzy Kasie, trzy razy by walnął spację na końcu? Ale ta teoria i tak jest na razie najrozsądniejsza :) Ciekawi mnie czy zadziała
komentarz 4 września 2015 przez event15 Szeryf (93,790 p.)
Chciałem właśnie to napisać.

W tym zapytainu coś mi śmierdzi:

SELECT `login` FROM `uzytkownicy` WHERE login='kasia'
To brzmi jak "wybierz login z tabeli użytkownicy gdzie kolumna login to kasia"
Lepiej jak by się powiedziało wybierz wszystko w tabeli użytkownicy gdzie login jest taki jak "kasia"
komentarz 4 września 2015 przez Michał Początkujący (260 p.)

select * from uzytkownicy where login like '%kasia%' Działa tak jak powinnoselect * from uzytkownicy where login = 'kasia '  

(z spacją na końcu) Nie dziła, 

ALE (z spacją na początku)  

select * from uzytkownicy where login = ' kasia' 

zwróciło poprawny wynik. 

komentarz 4 września 2015 przez Michał Początkujący (260 p.)

Dziwi mnie to.. Do wprowadzania danych do bazy użyłem formularza w postaci: 

<form method="post" action="rejestruj.php">
Login: <input type="text" name="nick">
Hasło: <input type="password" name="haslo1">
//itd..    </form>

poźniej te dane wyłapuje w konwencjonalny sposób:

$login = $_POST['nick']; $haslo1 = $_POST['haslo1']; $haslo2 = $_POST['haslo2'];

i wykonuje dla nich funkcje htmlentities:

$login = htmlentities($login, ENT_QUOTES, "UTF-8"); // itd.

Okazuje się że hasło podane w formularzu też jakimś cudem ma spacje na początku (sprawdziłem to przy próbie logowania) Trzeba wpisać login i hasło poprzedzone spacją.Nie rozumiem tylko dlaczego tak się dzieje..  

komentarz 4 września 2015 przez Michał Początkujący (260 p.)
WYBACZCIE PROSZĘ (za głupi błąd) JUŻ WIEM CO SKOPAŁEM - najgłupszy bład na świecie, a ja juz zgupiałem (nie zobaczyłem "literówki")

zapytanie wprowadzające wyglądało tak:

if ($rezultat_zap2 = @$polaczenie->query(             
                            sprintf( "INSERT INTO `uzytkownicy` (`login`,`haslo`, `plik`)
                                        VALUES (' %s ',' %s ', ' %s ') ",
                            mysqli_real_escape_string($polaczenie,$login),
                            mysqli_real_escape_string($polaczenie,$haslo1),
                            mysqli_real_escape_string($polaczenie,$nazwa_pliku_txt) )))

Nie zauważyłem że w VALUES ' %s ' na początku jest spacja
komentarz 4 września 2015 przez Comandeer Guru (600,810 p.)

Bo nie używa się jakiejś dziwacznej składni ze sprintf - to przed niczym nie chroni, a jedynie udziwnia zapytanie!

Poczytaj o prepared statements w PDO i nie będziesz miał takich dziwacznych problemów: https://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO#Podpinanie

+1 głos
odpowiedź 4 września 2015 przez Comandeer Guru (600,810 p.)
A na pewno to jest login, a nie np Iogin? Zresztą niezależnie od tego pole login powinno być polem z nałożonym indeksem UNIQUE
0 głosów
odpowiedź 3 września 2015 przez ScriptyChris Mędrzec (190,190 p.)

Nie wiem czy zamiast:

SELECT `login` FROM `uzytkownicy` WHERE login='kasia'

, powinno być po prostu SELECT login (bez cudzysłowiów).

komentarz 4 września 2015 przez Michał Początkujący (260 p.)

Sprawdzałem:

SELECT login FROM `uzytkownicy` WHERE login='kasia'

SELECT login FROM uzytkownicy WHERE login='kasia' 

nadal: "MySQL zwrócił pusty wynik (zero wierszy)"

poza tym gdyby składnia była nie poprawna wyskoczyła by mi informacja o błędzie 

0 głosów
odpowiedź 4 września 2015 przez mowmiheniek Stary wyjadacz (11,900 p.)
Zrobiłem taką samą bazę i to zapytanie działa i zwraca poprawny wynik.
Spróbuj wersji jeremusa.
Dodam tylko, że login nie powinien się powtarzać, ustaw login na jednoznaczny.

Podobne pytania

0 głosów
2 odpowiedzi 159 wizyt
+1 głos
1 odpowiedź 191 wizyt
pytanie zadane 8 października 2020 w SQL, bazy danych przez Mateusz Kita Początkujący (380 p.)
0 głosów
1 odpowiedź 220 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...