W typowym schemacie pracy z bazą danych w PHP (MySQLi) najpierw wykonuje się zapytanie, a następnie iteruje po wyniku i pobiera kolejne rekordy do zmiennych, aby je wyświetlić lub przetworzyć. Do tego właśnie służy funkcja mysqli_fetch_array($zapytanie) – pobiera jeden wiersz z rezultatu (result set) i zwraca go jako tablicę (zależnie od ustawień może zawierać indeksy liczbowe i/lub nazwy kolumn).
Dlatego w miejscu, w którym "ma się pojawić polecenie" odpowiadające za uzyskanie danych rekordu, właściwe jest użycie pobierania wiersza. Jest to szczególnie charakterystyczne dla konstrukcji typu while (...), gdzie warunek pętli stanowi właśnie kolejne pobieranie rekordu aż do wyczerpania wyniku.
Dlaczego pozostałe propozycje są niepoprawne w takim miejscu?
- mysqli_free_result($zapytanie) nie zwraca rekordu, tylko zwalnia pamięć zajętą przez wynik. Używa się jej po zakończeniu przetwarzania danych, a nie do odczytu wierszy.
- mysqli_num_fields($zapytanie) zwraca liczbę kolumn w wyniku. To informacja o strukturze danych (ile pól ma rekord), a nie same dane rekordu.
- mysqli_query($zapytanie) służy do wykonania zapytania SQL na połączeniu. W praktyce jej pierwszy argument to obiekt połączenia, a dopiero drugi to tekst zapytania. To etap wcześniejszy niż pobieranie wyników.
Wskazówka egzaminacyjna: rozpoznaj, czy w danym miejscu kod oczekuje danych rekordu (wtedy "fetch"), czy operacji administracyjnej na wyniku (np. "free"), albo informacji o metadanych (np. liczba pól).