KWALIFIKACJA INF3 - CZERWIEC 2017

PYTANIE NR 39.
W języku PHP zapisano fragment kodu działającego na bazie MySQL. Jego zadaniem jest wypisanie
Ilustracja przedstawia fragment kodu w języku PHP, który działa na bazie danych MySQL.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
mysqli_fetch_row() pobiera tylko jeden wiersz wyniku i zwraca go jako tablicę z indeksami liczbowymi zgodnymi z kolejnością kolumn w SELECT.
W zapytaniu: ulica=0, miasto=1, kod_pocztowy=2, więc echo $a[1], $a[2] wypisze miasto i kod pocztowy z pierwszego rekordu.

Pełne wyjaśnienie:

W MySQLi funkcja mysqli_fetch_row() pobiera jeden wiersz z wyniku zapytania i zwraca go jako tablicę indeksowaną numerycznie. To oznacza, że do wartości odwołujemy się indeksami 0, 1, 2..., a nie nazwami kolumn.

Kluczowe jest mapowanie indeksów na kolumny: indeksy odpowiadają kolejności pól w zapytaniu SELECT. Jeżeli zapytanie ma postać: SELECT ulica, miasto, kod_pocztowy ..., to w zwróconym wierszu:

  • pod indeksem 0 znajduje się wartość z kolumny ulica,
  • pod indeksem 1 znajduje się wartość z kolumny miasto,
  • pod indeksem 2 znajduje się wartość z kolumny kod_pocztowy.

Instrukcja echo wypisuje dokładnie te elementy tablicy, które zostały wskazane w kodzie. Skoro wypisywane są $a[1] oraz $a[2], wynikiem będą: miasto i kod pocztowy.

Pozostałe odpowiedzi są niepoprawne z dwóch typowych powodów:

  • Opcje z "ulicą" są błędne, bo w echo nie ma $a[0], czyli pierwszej kolumny.
  • Opcje "ze wszystkich rekordów" są błędne, bo bez pętli (np. while) funkcja fetch jest wywołana tylko raz, więc pobierany i wypisywany jest wyłącznie pierwszy zwrócony wiersz. Aby przetworzyć wszystkie rekordy, trzeba iterować po wyniku zapytania.

Na egzaminie warto pamiętać o dwóch regułach: tablice numeryczne w PHP zaczynają się od 0 oraz jedno wywołanie fetch = jeden rekord.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
mysqli_fetch_row() zwraca jeden wiersz z wyniku zapytania jako tablicę numeryczną. Indeksy 0, 1, 2… odpowiadają kolejności kolumn podanych w SELECT. Gdy nie ma już wierszy, funkcja zwraca wartość fałszywą.
To standard tablic indeksowanych numerycznie w PHP: pierwszy element ma indeks 0. W praktyce oznacza to, że przy SELECT trzech kolumn pierwsza jest pod 0, druga pod 1, trzecia pod 2. Pomylenie tego jest jedną z najczęstszych przyczyn złych odpowiedzi.
Indeks zależy od kolejności kolumn w SELECT. To, co stoi jako druga pozycja po SELECT, będzie miało indeks 1 w tablicy zwróconej przez mysqli_fetch_row(). Nie zależy to od kolejności kolumn w tabeli, tylko od listy w zapytaniu.
Gdy funkcja pobierająca dane (np. mysqli_fetch_row()) jest wywołana tylko raz i nie ma pętli (np. while). Wtedy pobierasz dokładnie jeden wiersz i tylko on może zostać wypisany. Wszystkie rekordy wypisuje się przez iterację po wyniku.
Trzeba użyć pętli, np. while, która będzie wywoływać mysqli_fetch_row() aż do końca wyniku. Każdy przebieg pętli to kolejny wiersz. Bez pętli nie ma mechanizmu, który "przechodzi" po całym wyniku zapytania.
mysqli_fetch_row() zwraca tablicę z indeksami liczbowymi (0,1,2…), a mysqli_fetch_assoc() zwraca tablicę asocjacyjną, gdzie kluczami są nazwy kolumn. W zadaniach egzaminacyjnych to rozróżnienie mówi, czy odwołujesz się jako $a[1], czy np. $a['miasto'].
Nie. Dla mysqli_fetch_row() liczy się kolejność kolumn podanych w zapytaniu SELECT. Nawet jeśli w tabeli kolumny są w innej kolejności, to indeksy w tablicy odpowiadają temu, co wpiszesz w SELECT jako pierwsze, drugie, trzecie itd.
Bo w praktycznych projektach bardzo często używa się pętli do wypisywania wyników z bazy, więc skojarzenie jest silne. Na egzaminie trzeba jednak sprawdzić, czy w kodzie faktycznie jest pętla i ile razy wywołano funkcję fetch. Jedno wywołanie to jeden rekord.
$a[2] oznacza trzecią wartość w tablicy numerycznej zwróconej przez mysqli_fetch_row(). Jest to wartość z trzeciej kolumny wskazanej w SELECT. Jeśli SELECT ma trzy kolumny, to indeks 2 będzie odnosił się do ostatniej z nich.
Najczęściej myli się numerację od 0 i przypisuje złe znaczenie indeksom (np. uznaje $a[1] za "pierwsze pole"). Drugi błąd to założenie, że bez pętli pobierane są wszystkie rekordy. Warto zawsze powiązać indeks z kolejnością kolumn w SELECT.
info

Około 54% zdających odpowiada poprawnie na to pytanie. trudne

Źródła:

  • PHP Manual: mysqli_fetch_row — https://www.php.net/manual/en/mysqli-result.fetch-row.php (dostęp: 2026-03-05)
  • PHP Manual: mysqli_query — https://www.php.net/manual/en/mysqli.query.php (dostęp: 2026-03-05)
  • MySQL 8.0 Reference Manual: SELECT Statement (kolejność kolumn w wyniku odpowiada liście SELECT) — https://dev.mysql.com/doc/refman/8.0/en/select.html (dostęp: 2026-03-05)

Materiały:

  • Dokumentacja PHP: MySQLi – funkcje mysqli_query() i mysqli_fetch_row() (opis zwracanych typów danych)
  • Materiały dydaktyczne INF.3 o komunikacji PHP z bazą MySQL (SELECT, pobieranie wyników)
  • Ćwiczenia praktyczne: porównanie mysqli_fetch_row(), mysqli_fetch_assoc() i mysqli_fetch_array() na tym samym zapytaniu

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego