Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych PHP

Słowa kluczowe: Funkcja mysql_fetch_row() w PHP mysql_query() w PHP

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.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.