Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Instrukcje przygotowane mysqli
Forum PHP.pl > Forum > PHP
q3trm
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();

mortus
Zmienna $d_u_q to obiekt klasy PDOStatement. Klasa ta nie posiada właściwości num_rows, ale posiada metodę rowCount().
q3trm
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.
mortus
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.
q3trm
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?.
mortus
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.