Wszystkie zagadnienia: PHP
średni egzamin zawodowy INF.03mysqliPHP

Połączenie z bazą danych przez mysqli

01

Opis

Ostatni rezultat w zdecydowanej większości zadań praktycznych INF.03 (arkusze 2021–2026 zebrane na portalu) to skrypt PHP, który łączy się z bazą danych, wysyła jedno z zapytań z pierwszej części zadania i wypisuje zwrócone wiersze na stronie. W arkuszu z czerwca 2025 ten fragment ma tytuł „Skrypt połączenia z bazą" i zaczyna się od trzech stałych wymagań: „Napisane w języku PHP", „Skrypty łączą się z serwerem bazodanowym na localhost, użytkownik root bez hasła, baza danych o nazwie gry" oraz „Na końcu jest zamykane połączenie z serwerem" (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Te same trzy zdania, ze zmienioną tylko nazwą bazy, powtarzają się w arkuszach z czerwca 2024 (baza motory), stycznia 2026 (baza samochody) i czerwca 2026 (baza islandia) oraz w przykładowym zadaniu z Informatora (baza wedkowanie) (arkusz CKE INF.03, czerwiec 2024, zadanie 1; arkusz CKE INF.03, styczeń 2026, zadanie 1; arkusz CKE INF.03, czerwiec 2026, zadanie 1; Informator INF.03, przykład zadania do części praktycznej).

Do napisania tego skryptu nie trzeba znać całej biblioteki: każdy arkusz zawiera Tabelę 1 „Wybór funkcji języka PHP do obsługi bazy MySQLi i MariaDB" z dziewięcioma funkcjami mysqli_* i ich zwracanymi wartościami. Lista jest identyczna w arkuszach z czerwca 2024, czerwca 2025, stycznia 2026 i czerwca 2026 oraz w Informatorze; nowsze arkusze dopisują pod nią jeszcze isset($zmienna) (arkusz CKE INF.03, czerwiec 2025, zadanie 1; arkusz CKE INF.03, styczeń 2026, zadanie 1). Tabela jest odtworzona niżej w sekcji Tabela. W arkuszach zebranych na portalu fraza mysqli pada w 165 plikach PDF (arkusze i zasady oceniania, E.14/EE.09/INF.03, 2017–2026), a mysqli_fetch_assoc nie pada ani razu – w tabeli arkusza są mysqli_fetch_row i mysqli_fetch_array.

W podstawie programowej za ten skrypt odpowiada jednostka o programowaniu aplikacji internetowych. Podstawa programowa INF.03.5, efekt 4: „Uczeń programuje skrypty wykonywane po stronie serwera" – kryterium 1: „programuje w jednym z języków Python, ASP.NET, PHP, JSP", kryterium 5: „stosuje biblioteki do obsługi bazy danych, odpowiednie dla języka i frameworka". Samo zapytanie, które skrypt wysyła, to wciąż Podstawa programowa INF.03.4, efekt 4: „Uczeń stosuje strukturalny język zapytań SQL".

Cztery zasady, które wynikają wprost z treści zadań i zasad oceniania:

Odbiór danych z formularza ($_POST, isset) jest opisany w haśle Odbiór danych POST w PHP, a zmienne, napisy i pętle PHP – w haśle Składnia i zmienne PHP. Tu zajmujemy się tylko tym, co dzieje się między połączeniem a jego zamknięciem.

02

Tabela

Tabela 1 z arkusza „Wybór funkcji języka PHP do obsługi bazy MySQLi i MariaDB" (arkusz CKE INF.03, czerwiec 2025, zadanie 1) – kolumna „typowy zapis" dopisana
Funkcja (jak w arkuszu)Co zwraca według arkuszaTypowy zapis w skrypcie
mysqli_connect(serwer, użytkownik, hasło, nazwa_bazy)id połączenia lub FALSE, gdy niepowodzenie$polaczenie = mysqli_connect("localhost", "root", "", "gry");
mysqli_select_db(id_polaczenia, nazwa_bazy)TRUE/FALSE w zależności od stanu operacjimysqli_select_db($polaczenie, "gry");
mysqli_error(id_polaczenia)Tekst komunikatu błęduecho mysqli_error($polaczenie);
mysqli_close(id_polaczenia)TRUE/FALSE w zależności od stanu operacjimysqli_close($polaczenie);
mysqli_query(id_polaczenia, zapytanie)Wynik zapytania$wynik = mysqli_query($polaczenie, $zapytanie);
mysqli_fetch_row(wynik_zapytania)Tablica numeryczna odpowiadająca wierszowi zapytania$wiersz = mysqli_fetch_row($wynik);
mysqli_fetch_array(wynik_zapytania)Tablica zawierająca kolejny wiersz z podanych w wyniku zapytania lub FALSE, jeżeli nie ma więcej wierszy$wiersz = mysqli_fetch_array($wynik);
mysqli_num_rows(wynik_zapytania)Liczba wierszy w podanym zapytaniu$ile = mysqli_num_rows($wynik);
mysqli_num_fields(wynik_zapytania)Liczba kolumn w podanym zapytaniu$kolumn = mysqli_num_fields($wynik);
isset($zmienna)TRUE/FALSE w zależności od tego, czy $zmienna istniejeif (isset($_POST["id"])) { … }
03

Skrypt PHP

<?php
// Skrypt 1 i Skrypt 2 z arkusza CKE INF.03, czerwiec 2025, zadanie 1 (baza gry)

// 1. Połączenie: serwer, użytkownik, hasło (puste), nazwa bazy z treści zadania
$polaczenie = mysqli_connect("localhost", "root", "", "gry");
if (!$polaczenie) {
    die("Błąd połączenia: " . mysqli_connect_error());
}

// 2. Skrypt 1 – zapytanie 3: nazwa i punkty pięciu gier o najwyższej punktacji,
//    każda w elemencie listy według wzoru "<nazwa> <punkty>"
$zapytanie3 = "SELECT nazwa, punkty FROM gry ORDER BY punkty DESC LIMIT 5";
$wynik = mysqli_query($polaczenie, $zapytanie3);

echo "<ul>";
while ($wiersz = mysqli_fetch_row($wynik)) {
    // tablica numeryczna: [0] = nazwa, [1] = punkty (kolejność jak w SELECT)
    echo "<li>" . $wiersz[0] . ' <span class="punkty">' . $wiersz[1] . "</span></li>";
}
echo "</ul>";

// 3. Skrypt 2 – zapytanie 1: id, nazwa i zdjęcie każdej gry;
//    obraz ze źródłem z pola zdjecie, tekstem alternatywnym nazwa, dymkiem id,
//    pod obrazem paragraf z nazwą pliku zdjęcia
$zapytanie1 = "SELECT id, nazwa, zdjecie FROM gry";
$wynik = mysqli_query($polaczenie, $zapytanie1);

while ($wiersz = mysqli_fetch_array($wynik, MYSQLI_ASSOC)) {
    // tablica asocjacyjna: klucze to nazwy kolumn z SELECT
    echo '<div class="gra">';
    echo '<img src="' . $wiersz["zdjecie"] . '" alt="' . $wiersz["nazwa"] . '"'
       . ' title="' . $wiersz["id"] . '">';
    echo "<p>" . $wiersz["zdjecie"] . "</p>";
    echo "</div>";
}

// 4. Ostatnia operacja na bazie: zamknięcie połączenia
mysqli_close($polaczenie);
?>
04

Krok po kroku

Skrypt z sekcji PHP składa się z pięciu kroków. Każdy odpowiada jednej funkcji z tabeli arkusza, więc kolejność jest zawsze ta sama.

1. Otwórz połączenie. Cztery argumenty w kolejności z tabeli arkusza: serwer, użytkownik, hasło, nazwa bazy. Na egzaminie to zawsze localhost, root, pusty napis i nazwa bazy z treści zadania (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Funkcja zwraca obiekt połączenia albo false, gdy się nie uda (php.net, mysqli_connect).

$polaczenie = mysqli_connect("localhost", "root", "", "gry");

Dlaczego czwarty argument: podanie nazwy bazy w mysqli_connect zastępuje osobne wywołanie mysqli_select_db($polaczenie, "gry") – obie drogi spełniają kryterium „połączenie z serwerem bazy danych i wybór bazy" (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie).

2. Wyślij zapytanie. Treść zapytania to zwykle napis z jednym z zapytań rezultatu 1, przepisany bez zmian albo z dopisanym warunkiem. mysqli_query zwraca wynik zapytania, który przekazujesz dalej.

$zapytanie = "SELECT nazwa, punkty FROM gry ORDER BY punkty DESC LIMIT 5";
$wynik = mysqli_query($polaczenie, $zapytanie);

Dlaczego osobna zmienna na zapytanie: kryterium z zasad oceniania mówi, że skrypt „zawiera instrukcje wysyłające do bazy danych zapytanie 2" (zasady oceniania INF.03, czerwiec 2024, zadanie 1 – streszczenie) – oceniający szuka tej instrukcji w kodzie, więc zapytanie widoczne w jednej linii jest łatwiejsze do znalezienia niż sklejane z kawałków.

3. Pobieraj wiersze w pętli. Każde wywołanie mysqli_fetch_row, mysqli_fetch_assoc albo mysqli_fetch_array zwraca jeden wiersz jako tablicę, a gdy wierszy już nie ma – wartość, która w warunku while jest fałszem (php.net, mysqli_fetch_array). Dlatego pętla while ($wiersz = mysqli_fetch_row($wynik)) przechodzi dokładnie po wszystkich wierszach i sama się kończy.

while ($wiersz = mysqli_fetch_row($wynik)) {
    echo "<li>" . $wiersz[0] . " " . $wiersz[1] . "</li>";
}

Różnica między funkcjami dotyczy tylko kluczy tablicy. Dla zapytania SELECT nazwa, punkty FROM gry ORDER BY punkty DESC LIMIT 5 pierwszy wiersz to gra Mag z 357 punktami (dane z tabeli gry jak w haśle Import bazy i kwerendy w phpMyAdmin):

  • mysqli_fetch_row zwraca tablicę numeryczną: $wiersz[0] to Mag, $wiersz[1] to 357 – indeks odpowiada pozycji kolumny w SELECT.
  • mysqli_fetch_assoc zwraca tablicę asocjacyjną: $wiersz["nazwa"] to Mag, $wiersz["punkty"] to 357 – klucz to nazwa kolumny.
  • mysqli_fetch_array bez drugiego argumentu zwraca obie wersje naraz (tryb MYSQLI_BOTH); z argumentem MYSQLI_NUM działa jak mysqli_fetch_row, z MYSQLI_ASSOC jak mysqli_fetch_assoc (php.net, mysqli_fetch_array).

Wersja numeryczna jest w tabeli arkusza i wymaga pilnowania kolejności kolumn; wersja asocjacyjna jest czytelniejsza, gdy w SELECT jest kilka pól. Uwaga na jedną pułapkę z dokumentacji: jeżeli dwie kolumny wyniku mają tę samą nazwę (np. nazwa z dwóch złączonych tabel), w tablicy asocjacyjnej ostatnia nadpisuje poprzednią – wtedy zostaje wersja numeryczna albo alias w zapytaniu (php.net, mysqli_fetch_array).

4. Wypisz wiersz w HTML według wzoru z zadania. Skrypt nie „zwraca" danych – wypisuje gotowe znaczniki. Jeżeli zadanie każe wyświetlić wiersze w tabeli, każdy obrót pętli to jeden <tr> (Informator INF.03, przykład zadania do części praktycznej: „każdy zwrócony zapytaniem wiersz jest wyświetlany w osobnym wierszu tabeli"):

echo "<table>";
while ($wiersz = mysqli_fetch_assoc($wynik)) {
    echo "<tr><td>" . $wiersz["nazwa"] . "</td><td>" . $wiersz["punkty"] . "</td></tr>";
}
echo "</table>";

Gdy polem jest nazwa pliku graficznego, trafia ona do atrybutu src znacznika <img>, a inne pole do alt – dokładnie tak jak w Skrypcie 2 z sekcji PHP.

5. Zamknij połączenie. mysqli_close($polaczenie) jako ostatnia instrukcja dotycząca bazy – po ostatniej pętli, nie przed nią.

mysqli_close($polaczenie);

Dlaczego to osobny krok: w zasadach oceniania zamknięcie ma własne kryterium – „ostatnią operacją na bazie jest jej zamknięcie" (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie).

Co z błędami. Tabela arkusza podaje mysqli_error(id_polaczenia) jako funkcję zwracającą tekst komunikatu. Od PHP 8.1.0 domyślny tryb raportowania mysqli to MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT (wcześniej MYSQLI_REPORT_OFF), czyli nieudane połączenie lub błędne zapytanie kończy skrypt wyjątkiem mysqli_sql_exception z komunikatem na stronie (php.net, mysqli_driver::$report_mode). Zasady oceniania każą sprawdzać skrypt w XAMPP 8.2.12 (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie), więc literówka w nazwie bazy albo w zapytaniu jest od razu widoczna w przeglądarce – to ułatwia testowanie, ale też oznacza, że skrypt z błędem nie wypisze nic poza komunikatem.

05

Porównanie

FunkcjaRodzaj tablicyOdczyt pola nazwaOdczyt pola punktySkąd
mysqli_fetch_row($wynik)numeryczna$wiersz[0]$wiersz[1]tabela arkusza
mysqli_fetch_assoc($wynik)asocjacyjna$wiersz["nazwa"]$wiersz["punkty"]php.net (w arkuszach nie pada)
mysqli_fetch_array($wynik)obie naraz (MYSQLI_BOTH)$wiersz[0] albo $wiersz["nazwa"]$wiersz[1] albo $wiersz["punkty"]tabela arkusza
mysqli_fetch_array($wynik, MYSQLI_ASSOC)asocjacyjna$wiersz["nazwa"]$wiersz["punkty"]php.net

Na egzaminie

Rezultat „Skrypt połączenia z bazą" jest w każdym arkuszu INF.03 zebranym na portalu (2021–2026); fraza „Skrypt połączenia" pada w 114 plikach PDF z lat 2016–2026 (arkusze i zasady, E.14/EE.09/INF.03). Zmienia się tylko nazwa bazy, numer zapytania i wzór wypisania.

Jak brzmi polecenie. Czerwiec 2025: Skrypt 1 „Wysyła do bazy danych zapytanie 3" i „Zwrócone wiersze są wyświetlane w elementach listy z sekcji lewej według wzoru: „<nazwa> <punkty>", gdzie nawiasy <> oznaczają wartość pobraną z bazy danych"; Skrypt 2 wysyła zapytanie 1, a wiersze wyświetla jako „Obrazu, którego źródłem jest pole zdjecie, tekstem alternatywnym jest pole nazwa, a podpowiedzią (dymek …) jest pole id" oraz „Paragrafu z nazwą zdjęcia" (arkusz CKE INF.03, czerwiec 2025, zadanie 1). W kodzie:

echo "<li>" . $wiersz[0] . " " . $wiersz[1] . "</li>";
echo '<img src="' . $wiersz["zdjecie"] . '" alt="' . $wiersz["nazwa"] . '"'
   . ' title="' . $wiersz["id"] . '">';

Czerwiec 2024: Skrypt 1 wypisuje listę definicji – termin według wzoru „<nazwa>, rozpoczyna się w <poczatek>, " z odnośnikiem „zobacz zdjęcie" do pliku o nazwie z bazy, element definicji to pole opis; Skrypt 2 „Wysyła do bazy danych zapytanie 3", a zwrócona wartość „jest wyświetlana w paragrafie po słowach: Wpisanych wycieczek:" (arkusz CKE INF.03, czerwiec 2024, zadanie 1). Zapytanie 3 w tym arkuszu zlicza wiersze, więc wynik ma jeden wiersz i jedną kolumnę:

$wynik = mysqli_query($polaczenie, "SELECT COUNT(*) FROM wycieczki");
$wiersz = mysqli_fetch_row($wynik);
echo "<p>Wpisanych wycieczek: " . $wiersz[0] . "</p>";

Styczeń 2026: Skrypt 1 wysyła zapytanie 3 (złączenie pojazdów z kolorami), a „W czwartej kolumnie tabeli wyświetlana jest cena całkowita, która jest sumą ceny z tabeli pojazdy oraz dopłaty z tabeli kolory" (arkusz CKE INF.03, styczeń 2026, zadanie 1) – czyli w pętli liczysz sumę dwóch pól i wypisujesz ją w <td>. Czerwiec 2026: „Każda zwrócona zapytaniem nazwa jest wyświetlana jako element listy", a Skrypt 3 dla każdego wiersza wypisuje odnośnik-obraz przekazujący idObiekt metodą GET (arkusz CKE INF.03, czerwiec 2026, zadanie 1).

Za co są punkty. Zasady oceniania z czerwca 2025 dzielą rezultat na kryteria: działające połączenie z serwerem i wybór bazy o nazwie z zadania; zamknięcie jako ostatnia operacja; wysłanie któregoś z zapytań; działanie skryptu formularza tylko przy wypełnionym polu; pobranie danych z tablicy globalnej zgodnej z metodą formularza; osobno – poprawne wypisanie wyniku każdego skryptu (lista nazwa i punkty; obrazy z nazwami; nagłówek według wzoru; wstawiony rekord); na końcu przynajmniej jedna zmienna o znaczącej nazwie po polsku lub angielsku (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). W czerwcu 2024 układ jest ten sam: połączenie i wybór bazy motory, zamknięcie, instrukcja wysyłająca zapytanie, wypisanie tekstu według wzoru, odnośnik do zdjęcia z dopisanym rozszerzeniem, opis, napis „Wpisanych wycieczek:" z wartością, znaczące nazewnictwo (zasady oceniania INF.03, czerwiec 2024, zadanie 1 – streszczenie). W czerwcu 2026 połączenie, wybór bazy i zamknięcie są w jednym kryterium – wystarczy na jednej stronie (zasady oceniania INF.03, czerwiec 2026, zadanie 1 – streszczenie).

Trzy uwagi z nagłówka zasad. Po pierwsze, egzaminator sprawdza skrypt w konkretnej wersji XAMPP (8.1.2 w czerwcu 2024, 8.2.12 w czerwcu 2025 i 2026) – czyli w PHP 8, nie w starym PHP 5. Po drugie, kryteria za połączenie, zapytanie i zamknięcie „są sprawdzane tylko w przypadku użycia bibliotek MySQLi lub PDO" – skrypt na innej bibliotece nie dostaje tych punktów. Po trzecie, gdy witryna nie uruchamia się z powodu błędów PHP, kryteria dotyczące połączenia, zapytań i zamknięcia są oceniane w kodzie źródłowym – więc nawet niedziałający skrypt z poprawnie zapisanym mysqli_connect, mysqli_query i mysqli_close zbiera część punktów (zasady oceniania INF.03, czerwiec 2024 i czerwiec 2025, zadanie 1 – streszczenie).

07

Pułapki w zadaniach

Nazwa bazy inna niż w treści zadania. Kryterium brzmi „połączenie z serwerem bazy danych i wybór bazy gry" – z konkretną nazwą (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). Jeżeli w phpMyAdmin założyłeś bazę gry, a w mysqli_connect wpisałeś Gry albo baza, w PHP 8 strona pokaże wyjątek mysqli_sql_exception z komunikatem o nieznanej bazie (php.net, mysqli_driver::$report_mode). Naprawa: skopiuj nazwę z treści zadania do obu miejsc.

Zamknięcie połączenia w złym miejscu. Kryterium mówi wprost: „ostatnią operacją na bazie jest jej zamknięcie" (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). mysqli_close wstawione po pierwszym skrypcie, a przed drugim, oznacza, że drugi mysqli_query dostaje zamknięte połączenie i kończy się błędem. Gdy skrypty są w kilku miejscach jednej strony, zamknięcie idzie na sam koniec ostatniego bloku PHP.

Pobranie jednego wiersza zamiast pętli. Pojedyncze $wiersz = mysqli_fetch_row($wynik); zwraca tylko pierwszy wiersz wyniku. Kryterium wymaga wypisania wszystkich zwróconych nazw jako elementów listy (zasady oceniania INF.03, czerwiec 2026, zadanie 1 – streszczenie), więc na stronie brakuje reszty. Pętla while z wywołaniem funkcji w warunku kończy się sama, gdy wierszy już nie ma (php.net, mysqli_fetch_array). Wyjątek to zapytanie zliczające – tam wynik ma jeden wiersz i pojedyncze pobranie wystarczy (arkusz CKE INF.03, czerwiec 2024, zadanie 1).

Klucz tablicy niezgodny z funkcją. $wiersz["nazwa"] po mysqli_fetch_row albo $wiersz[0] po mysqli_fetch_assoc daje w PHP 8 ostrzeżenie o nieistniejącym kluczu i pusty tekst w miejscu wartości. Tablica numeryczna ma indeksy 0, 1, 2 w kolejności kolumn z SELECT; asocjacyjna – nazwy kolumn (php.net, mysqli_fetch_array). Najprościej trzymać się jednej funkcji w całym skrypcie.

Kolejność argumentów w mysqli_connect i mysqli_query. Tabela arkusza podaje kolejność: mysqli_connect(serwer, użytkownik, hasło, nazwa_bazy) i mysqli_query(id_polaczenia, zapytanie) (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Po zamianie miejscami użytkownika i hasła ("", "root") albo zapytania i połączenia skrypt „nie łączy się" mimo poprawnych danych. Tabela leży na stole – sprawdź w niej kolejność, zanim zaczniesz szukać błędu gdzie indziej.

Skrypt w pliku .html. Serwer Apache wykonuje kod PHP tylko w plikach z rozszerzeniem .php; w pliku .html blok <?php … ?> trafia do przeglądarki jako tekst albo znika jako nieznany znacznik. Arkusze wprost wymieniają nazwę pliku z rozszerzeniem .php wśród rezultatów do nagrania, np. motor.php (arkusz CKE INF.03, czerwiec 2024, zadanie 1) czy islandia.php i obiekty.php (arkusz CKE INF.03, czerwiec 2026, zadanie 1).

Zmienne bez znaczenia. Ostatnie kryterium rezultatu 5 wymaga przynajmniej jednej zmiennej, której nazwa „odzwierciedla cel zastosowania" i jest po polsku lub angielsku (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). $a, $b, $x w skrypcie połączenia to punkt oddany za nic – $polaczenie, $wynik, $wiersz kosztują tyle samo klawiszy.

08

Sprawdź się

Fragment skryptu do arkusza z czerwca 2025 (baza gry, zapytanie 3 – nazwa i punkty pięciu gier o najwyższej punktacji):

KrokKod
Połączenie$polaczenie = ("localhost", "root", "", "gry");
Zapytanie$wynik = ($polaczenie, "SELECT nazwa, punkty FROM gry ORDER BY punkty DESC LIMIT 5");
Pętlawhile ($wiersz = ($wynik)) { echo $wiersz[0] . " " . $wiersz[1]; }
Zamknięcie($polaczenie);

Uzupełnij odpowiedzi na podstawie tabeli arkusza i sekcji Krok po kroku:

PytanieOdpowiedź
Ilu argumentów wymaga mysqli_connect według tabeli arkusza?
Jaki jest użytkownik bazy w skrypcie na egzaminie?
Jaką wartość zwraca mysqli_connect, gdy połączenie się nie uda?
Pod jakim indeksem po mysqli_fetch_row jest druga kolumna z SELECT?
Którą funkcją z tabeli arkusza sprawdzisz liczbę zwróconych wierszy?
Jakie rozszerzenie musi mieć plik, żeby Apache wykonał kod PHP?

Po mysqli_fetch_assoc wartość pola nazwa odczytasz przez $wiersz[], a po mysqli_fetch_row przez $wiersz[].

09

Najczęściej zadawane pytania

Czy trzeba używać mysqli_select_db, skoro nazwa bazy jest w mysqli_connect?

Nie. Czwarty argument mysqli_connect wybiera bazę od razu, a kryterium oceniania mówi o „połączeniu z serwerem bazy danych i wyborze bazy" bez wskazania funkcji (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). mysqli_select_db jest w tabeli arkusza jako druga droga – przydaje się, gdy połączenie otwarto bez nazwy bazy albo skrypt przełącza się między bazami.

Czy mogę użyć mysqli_fetch_assoc, skoro nie ma jej w tabeli arkusza?

Tak. Tabela arkusza to pomoc, nie lista dozwolonych funkcji – zasady oceniania wymagają biblioteki MySQLi lub PDO i poprawnej składni, nie konkretnych nazw (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). mysqli_fetch_assoc to dokładnie to samo, co mysqli_fetch_array z argumentem MYSQLI_ASSOC (php.net, mysqli_fetch_array), a mysqli_fetch_array w tabeli jest.

Czy na egzaminie trzeba obsługiwać błąd połączenia?

W zasadach oceniania nie ma osobnego kryterium za obsługę błędów; punkt jest za działające połączenie i wybór bazy (zasady oceniania INF.03, czerwiec 2025, zadanie 1 – streszczenie). Linijka if (!$polaczenie) { die(mysqli_connect_error()); } nie szkodzi i pokazuje oceniającemu, że wiesz, co zwraca funkcja. W PHP 8.1 i nowszym nieudane połączenie i tak przerwie skrypt wyjątkiem (php.net, mysqli_driver::$report_mode).

Skąd wziąć treść zapytania do skryptu?

Z pierwszej części zadania. Polecenie ma zawsze postać „Wysyła do bazy danych zapytanie 3" – to zapytanie już napisałeś w phpMyAdmin i zapisałeś w pliku z kwerendami (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Kopiujesz je do napisu w PHP. Gdy zadanie mówi o zapytaniu „zmodyfikowanym", dopisujesz warunek z wartością z formularza lub parametru – to dom hasła o odbiorze danych POST.

Czy skrypt PHP może być w tym samym pliku co HTML strony?

Tak, i tak jest na egzaminie: strona ma rozszerzenie .php, a bloki <?php … ?> siedzą w tych miejscach struktury, gdzie ma się pojawić wynik – lista w sekcji lewej, obrazy w bloku głównym (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Połączenie można otworzyć w pierwszym bloku, a zamknąć w ostatnim; zmienna $polaczenie jest widoczna między blokami tego samego pliku.

Czy między połączeniem a zamknięciem może być kilka zapytań?

Tak – Skrypt 1, Skrypt 2 i kolejne z jednego arkusza korzystają z jednego połączenia, a zamknięcie jest jedno, na końcu (arkusz CKE INF.03, czerwiec 2025, zadanie 1). Każde zapytanie dostaje własne wywołanie mysqli_query, a wynik poprzedniego można nadpisać tą samą zmienną $wynik, jeżeli poprzednia pętla już się skończyła.

Co zobaczę, gdy zapytanie ma błąd składni?

W XAMPP z PHP 8 – komunikat wyjątku mysqli_sql_exception z treścią błędu MySQL i numerem linii skryptu, bo domyślny tryb raportowania od PHP 8.1.0 to MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT (php.net, mysqli_driver::$report_mode). Najszybsza diagnoza: wklej to samo zapytanie do zakładki SQL w phpMyAdmin – jeżeli tam też nie działa, błąd jest w SQL, nie w PHP.

W arkuszach egzaminacyjnych

To zagadnienie pojawiło się w zadaniach części praktycznej CKE:

↗

Powiązane zagadnienia