W przedstawionym kodzie PHP w miejscu kropek powinno zostać umieszczone polecenie
$zapytanie = mysqli_query($db, "SELECT imie, nazwisko FROM uzytkownik"); $ile = ....................................; for ($i = 0; $i < $ile; $i++) { $wiersz = mysqli_fetch_row($zapytanie); echo "$wiersz[0] $wiersz[1]"; }
A.
mysqli_free_result($zapytanie)
B.
mysqli_num_fields($zapytanie)
C.
mysqli_num_rows($zapytanie)
D.
mysqli_fetch_row($zapytanie)
Polecenie mysqli_num_rows($zapytanie) jest właściwe, ponieważ zmienna $zapytanie przechowuje wynik zapytania SELECT, a ta funkcja zwraca liczbę wierszy znajdujących się w tym wyniku. Ta liczba jest zapisywana do $ile i używana w warunku pętli for: pętla ma wykonać się dokładnie tyle razy, ile rekordów zwróciła baza. W każdej iteracji mysqli_fetch_row($zapytanie) pobiera następny wiersz jako tablicę indeksowaną numerycznie, dlatego $wiersz[0] oznacza imię, a $wiersz[1] nazwisko. Do zapamiętania: składnia to mysqli_num_rows(wynik_zapytania) i dotyczy liczby rekordów, nie liczby kolumn. W praktyce używa się jej przed wyświetlaniem list, tabel wyników lub komunikatu o braku danych.
W tym fragmencie potrzebna jest liczba rekordów zwróconych przez zapytanie, bo zmienna $ile steruje liczbą obiegów pętli for. mysqli_free_result($zapytanie) służy do zwolnienia pamięci zajmowanej przez wynik zapytania. Takie polecenie stosuje się po zakończeniu pracy z wynikiem, a nie przed pobieraniem danych, bo po jego użyciu nie ma już z czego odczytywać wierszy. mysqli_num_fields($zapytanie) zwraca liczbę pól, czyli kolumn w wyniku. Dla zapytania wybierającego imie i nazwisko byłaby to wartość 2, niezależna od liczby użytkowników. mysqli_fetch_row($zapytanie) pobiera jeden wiersz jako tablicę i przesuwa wskaźnik wyniku na następny rekord; nie zwraca liczby wierszy, więc nie nadaje się do warunku $i < $ile. Poprawne polecenie to mysqli_num_rows($zapytanie). Typowy błąd polega na pomyleniu trzech pojęć: liczby wierszy, liczby kolumn oraz pobrania pojedynczego rekordu z wyniku.