W języku PHP pobrano z bazy danych wynik działania kwerendy za pomocą polecenia mysqli_query. Aby otrzymać ze zwróconej kwerendy wiersz danych, należy zastosować polecenie
A. mysqli_field_count
B. mysqli_fetch_row
C. mysqli_fetch_lengths
D. mysqli_fetch_fields
Opracowane na podstawie zadania CKE, styczeń 2016 (arkusz E.14-X-16.01): Funkcje mysql_* usunięto w PHP 7 - zadanie przepisano na odpowiedniki mysqli_*.
Funkcja mysqli_fetch_row jest właściwa, ponieważ służy do pobrania jednego wiersza z wyniku zwróconego przez mysqli_query. Po wykonaniu zapytania SELECT funkcja mysqli_query nie daje od razu pojedynczych danych, tylko obiekt wyniku, czyli coś w rodzaju zestawu rekordów czekających na odczyt. Dopiero mysqli_fetch_row przesuwa wskaźnik wyniku na następny rekord i zwraca go jako tablicę indeksowaną numerycznie, np. $wiersz[0], $wiersz[1], $wiersz[2]. W praktyce wygląda to często tak: $wynik = mysqli_query($polaczenie, $sql); potem $wiersz = mysqli_fetch_row($wynik); i można odczytać wartości kolumn. Moim zdaniem warto zapamiętać, że mysqli_fetch_row jest dobre, gdy wystarczy dostęp po numerach kolumn, natomiast przy większym kodzie często wygodniejsze bywa mysqli_fetch_assoc, bo używa nazw pól. Dobrą praktyką jest też sprawdzanie, czy mysqli_query nie zwróciło false, oraz stosowanie zapytań przygotowanych, szczególnie przy danych od użytkownika. To ogranicza ryzyko SQL injection i robi kod bardziej zawodowy, a nie tylko działający na sprawdzianie.
W tym pytaniu łatwo pomylić funkcje z rodziny mysqli, bo ich nazwy są do siebie podobne i wszystkie dotyczą wyniku zapytania albo struktury danych. Trzeba jednak odróżnić pobieranie rekordu od pobierania metadanych. mysqli_field_count nie zwraca wiersza danych z wyniku SELECT. Ta funkcja informuje, ile kolumn znajduje się w ostatnim zapytaniu dla danego połączenia. Przydaje się raczej do sprawdzania struktury wyniku, a nie do odczytu konkretnego rekordu z tabeli. mysqli_fetch_fields także nie pobiera wartości z rekordów. Ona zwraca informacje o polach, czyli metadane kolumn: nazwy, typy, długości, flagi i podobne szczegóły. To może być użyteczne przy dynamicznym generowaniu tabeli HTML, ale nie wtedy, gdy chcemy dostać np. imię klienta albo cenę produktu z konkretnego wiersza. mysqli_fetch_lengths działa jeszcze inaczej, bo zwraca długości wartości z ostatnio pobranego wiersza, ale sama tego wiersza nie pobiera. Typowy błąd myślowy polega na założeniu, że skoro funkcja ma w nazwie fetch, to zawsze pobiera dane użytkowe. W mysqli tak nie jest. Najpierw trzeba mieć wynik z mysqli_query, potem użyć funkcji pobierającej rekord, na przykład mysqli_fetch_row, mysqli_fetch_assoc albo mysqli_fetch_array. Dopiero wtedy mamy realne dane z bazy, które można wyświetlić lub przetworzyć w PHP.