W zaprezentowanym fragmencie kodu wykonywane jest zapytanie SQL:
SELECT imie, nazwisko FROM uzytkownik
Następnie liczba zwróconych rekordów jest wyznaczana przez mysqli_num_rows($zapytanie) i używana jako granica pętli for. Skoro pętla ma przejść po wszystkich rekordach, to w jej wnętrzu trzeba za każdym obrotem pobrać następny wiersz z obiektu wyniku zapytania.
Odpowiedź mysqli_fetch_row($zapytanie); jest poprawna, ponieważ:
- pobiera jeden rekord (jeden wiersz) z wyniku zapytania,
- zwraca go jako tablicę indeksowaną numerycznie,
- dzięki temu odwołania $wiersz[0] i $wiersz[1] odpowiadają kolejno kolumnom imie i nazwisko wybranym w SELECT.
Pozostałe propozycje nie spełniają tego celu:
- mysqli_free_result($zapytanie); służy do zwolnienia pamięci zajmowanej przez wynik zapytania. Wywołanie jej w pętli zniszczyłoby wynik zamiast pobierać dane do wyświetlenia.
- mysqli_num_fields($zapytanie); zwraca liczbę kolumn w wyniku (tu: 2), czyli metadane, a nie kolejny rekord. Nie da się z tego zbudować $wiersz[0] i $wiersz[1] jako wartości imienia i nazwiska.
- mysqli_query($zapytanie); jest błędne, bo ta funkcja oczekuje połączenia i tekstu zapytania SQL, a nie samego wyniku. Ponowne "odpytywanie" w miejscu pobierania rekordu jest inną operacją niż iteracja po już otrzymanych danych.
W praktyce często spotkasz też alternatywę mysqli_fetch_assoc, która zwraca tablicę asocjacyjną i pozwala odwoływać się do kolumn po nazwie (np. 'imie'), ale w tym zadaniu kod używa indeksów liczbowych, więc właściwy jest wariant zwracający tablicę numeryczną.