Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Instrukcje przygotowane mysqli, num_rows zwraca 0, why?
q3trm
post 17.03.2013, 19:18:45
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Witam. Mam problem z funkcją num_rows, otóż nie wiem, dlaczego pomimo spełnienia warunku w WHERE, num_rows zwraca 0 thumbsdownsmileyanim.gif. Ze zwykłym query() wszystko działa normalnie.

  1.  
  2. $duplicate_user_query = "SELECT `login` FROM `user` WHERE login = ?"; //sprawdź czy istnieje użytkownik
  3. $d_u_q = $db ->prepare($duplicate_user_query);
  4. $d_u_q = bind_param("s", $login);
  5. $d_u_q ->execute();
  6.  
  7. $duplicate = $d_u_q ->num_rows;
  8.  
  9. $add_user ->close();

Go to the top of the page
+Quote Post
mortus
post 17.03.2013, 19:48:46
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zmienna $d_u_q to obiekt klasy PDOStatement. Klasa ta nie posiada właściwości num_rows, ale posiada metodę rowCount().
Go to the top of the page
+Quote Post
q3trm
post 17.03.2013, 20:36:06
Post #3





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


To znaczy, że biblioteka MySQLi dziedziczy po klasy PDOStatement?.

MySQLi ma swoją metodę przekazywania placeholder bind_param(), dlaczego jej nie dziedziczy po PDOStatement?


Call to undefined method mysqli_stmt::rowCount()

hmm, żeby była jasność, korzystam z biblioteki MySQLi, a nie PDO.

Ten post edytował q3trm 17.03.2013, 20:43:18
Go to the top of the page
+Quote Post
mortus
post 17.03.2013, 20:54:22
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie no sorki, nie zauważyłem, że tu chodzi o mysqli. Najpierw musisz użyć metody store_result(), a dopiero później możesz pobrać num_rows
  1. $d_u_q->store_result();
  2. $duplicate = $d_u_q->num_rows;

Zobacz przykład w manualu.

Ten post edytował mortus 17.03.2013, 20:55:43
Go to the top of the page
+Quote Post
q3trm
post 17.03.2013, 21:08:06
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Poradziłem sobie w ten sposób:

  1.  
  2. $duplicate_user_query = "SELECT count(1) FROM `user` WHERE login = ?"; //sprawdź czy istnieje użytkownik
  3. $d_u_q = $db ->prepare($duplicate_user_query);
  4. $d_u_q = bind_param("s", $login);
  5. $d_u_q ->execute();
  6.  
  7. $result ->bind_result($found);
  8. $result ->fetch();


Działa prawie tak samo jak num_rows.


Jeszcze takie pytanie, num_rows zwracało w przypadku błędu pobierania danych wartość -1?.
Go to the top of the page
+Quote Post
mortus
post 17.03.2013, 21:27:27
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie wiem co rozumiesz przez błąd pobierania danych, bo gdy zapytanie będzie nieprawidłowe, to się nie wykona, co z kolei oznacza, że nawet nie będziemy mogli spróbować pobrać ilości zwróconych wierszy (obiekt mysqli_stmt stanie się w tym momencie wartością false). Jeśli natomiast zapytanie jest prawidłowe, ale nie zwraca żadnych rekordów, to ich liczba (num_rows) jest po prostu równa 0.
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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 08:24