KWALIFIKACJA INF3 - STYCZEŃ 2016

PYTANIE NR 37.
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 w postaci tablicy indeksowanej, należy zastosować polecenie
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
mysqli_query zwraca wynik zapytania (result set). Aby pobrać pojedynczy wiersz jako tablicę indeksowaną numerycznie, stosuje się mysqli_fetch_row, która zwraca kolejne rekordy po jednym. Pozostałe funkcje dotyczą listy pól, długości pola lub długości kolumn w bieżącym wierszu, a nie pobrania wiersza.

Pełne wyjaśnienie:

Po wykonaniu zapytania do bazy danych funkcją mysqli_query otrzymuje się obiekt/zasób wyniku, czyli zestaw rekordów (result set). Sam wynik nie jest jeszcze "wierszem danych" – trzeba go odczytać funkcją pobierającą rekord.

Poprawne jest użycie mysqli_fetch_row, ponieważ ta funkcja pobiera jeden kolejny wiersz z wyniku zapytania i zwraca go jako tablicę indeksowaną (z kluczami 0, 1, 2…). Jest to dokładnie format wskazany w treści pytania. Funkcję tę typowo wywołuje się w pętli, aż do wyczerpania wyników.

Pozostałe propozycje nie służą do pobrania wiersza danych:

  • mysqli_list_fields dotyczy informacji o polach (kolumnach) tabeli, a nie pobrania rekordów zwróconych przez zapytanie SELECT.
  • mysqli_field_len odnosi się do metadanych pola/kolumny (np. długości pola) i nie zwraca całego wiersza danych.
  • mysqli_fetch_lengths zwraca długości kolumn w aktualnie pobranym wierszu (liczby znaków/bajtów), więc jest funkcją pomocniczą do analizy rozmiarów danych, nie do samego pobrania rekordu.

W praktyce, jeśli potrzebujesz wiersza jako tablicy asocjacyjnej (klucze nazwami kolumn), stosuje się inne funkcje (np. warianty "fetch assoc"). W tym zadaniu kluczowe jest rozpoznanie, że "tablica indeksowana" oznacza pobieranie wiersza w postaci listy wartości, co zapewnia właśnie mysqli_fetch_row.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
mysqli_query() zwraca wynik zapytania (tzw. result set) dla zapytań typu SELECT lub wartość logiczną dla zapytań modyfikujących dane. Ten wynik nie jest jeszcze wierszem danych — aby uzyskać rekord, trzeba użyć funkcji typu mysqli_fetch_row() lub pokrewnych.
Aby pobrać jeden rekord jako tablicę indeksowaną (0,1,2...), używa się mysqli_fetch_row(). Funkcja pobiera kolejne wiersze z wyniku zwróconego przez mysqli_query(). Gdy nie ma już danych, zwraca wartość oznaczającą koniec wyników, co ułatwia użycie w pętli.
Funkcje z rodziny mysql_* są przestarzałe i zostały usunięte z nowszych wersji PHP, więc kod z mysql_query() nie uruchomi się na współczesnych serwerach. Zamiast tego stosuje się MySQLi lub PDO, które są wspierane i oferują bezpieczniejsze mechanizmy pracy z bazą.
mysqli_fetch_row() pobiera cały wiersz danych jako tablicę indeksowaną. Natomiast mysqli_fetch_lengths() zwraca długości (rozmiary) kolumn dla aktualnie pobranego wiersza, czyli metainformację o danych. To różne cele: pierwsza funkcja daje rekord, druga opisuje jego pola.
Nie. mysqli_list_fields() dotyczy informacji o polach (kolumnach) tabeli lub struktury, a nie pobierania rekordów zwróconych przez zapytanie SELECT. Do pobierania danych wiersz po wierszu używa się funkcji "fetch", np. mysqli_fetch_row() (tablica indeksowana) lub innych wariantów.
Najczęstszy błąd to mechaniczne podmiany nazw bez sprawdzenia parametrów: w MySQLi zwykle przekazuje się połączenie i zapytanie w innej postaci niż w starym API. Drugi błąd to brak zmiany funkcji pobierania danych. Warto też pamiętać o bezpieczeństwie i rozważyć przygotowane zapytania.
PDO jest dobrym wyborem, gdy aplikacja ma być przenośna między różnymi bazami danych lub gdy chcesz spójne API do przygotowanych zapytań i trybów pobierania danych. MySQLi jest ściśle związane z MySQL/MariaDB i bywa prostsze, jeśli projekt na pewno zostaje przy tej bazie.
Typowy schemat to pętla, która wywołuje funkcję pobierającą rekord, dopóki zwraca dane. Dla tablicy indeksowanej będzie to mysqli_fetch_row(). W praktyce w każdej iteracji otrzymujesz kolejny rekord, a po wyczerpaniu wyników pętla kończy się automatycznie.
Kluczowe są słowa: tablica indeksowana oznacza numeryczne indeksy (0,1,2…), a tablica asocjacyjna ma klucze będące nazwami kolumn. W zadaniach egzaminacyjnych to doprecyzowanie zwykle wskazuje, którą funkcję "fetch" należy wybrać i jaki format danych będzie w kodzie.
Samo użycie MySQLi nie gwarantuje bezpieczeństwa, ale umożliwia stosowanie przygotowanych zapytań, które znacząco ograniczają ryzyko SQL injection. Kluczowe jest wiązanie parametrów zamiast sklejania zapytania z danymi użytkownika. To jedna z przewag nowoczesnych rozszerzeń nad historycznym mysql_*.
info

Około 58% zdających odpowiada poprawnie na to pytanie. średnie

Eksperci podkreślają: "mysqli_query zwraca wynik zapytania (result set)."

Źródła:

  • PHP Manual: mysql_query — informacja o wycofaniu i usunięciu rozszerzenia mysql, https://www.php.net/manual/en/function.mysql-query.php (dostęp 2026-03-02)
  • PHP Manual: MySQLi — opis funkcji mysqli_query, https://www.php.net/manual/en/mysqli.query.php (dostęp 2026-03-02)
  • PHP Manual: MySQLi — opis funkcji mysqli_fetch_row, https://www.php.net/manual/en/mysqli-result.fetch-row.php (dostęp 2026-03-02)

Materiały:

  • Dokumentacja PHP: MySQLi (proceduralnie i obiektowo) – sekcje query oraz fetch
  • Materiały o PDO i trybach pobierania danych (FETCH_NUM, FETCH_ASSOC)
  • Powtórka podstaw PHP: tablice, pętle, obsługa błędów

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego