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:
localhost, użytkownik root, hasło puste, nazwa bazy z treści zadania – ta sama, którą założyłeś w phpMyAdmin (arkusz CKE INF.03, czerwiec 2025, zadanie 1; jak to zrobić: Import bazy i kwerendy w phpMyAdmin).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.
| Funkcja (jak w arkuszu) | Co zwraca według arkusza | Typowy 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 operacji | mysqli_select_db($polaczenie, "gry"); |
| mysqli_error(id_polaczenia) | Tekst komunikatu błędu | echo mysqli_error($polaczenie); |
| mysqli_close(id_polaczenia) | TRUE/FALSE w zależności od stanu operacji | mysqli_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 istnieje | if (isset($_POST["id"])) { … } |
<?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);
?>
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.
| Funkcja | Rodzaj tablicy | Odczyt pola nazwa | Odczyt pola punkty | Ską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 |
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).
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.
Fragment skryptu do arkusza z czerwca 2025 (baza gry, zapytanie 3 – nazwa i punkty pięciu gier o najwyższej punktacji):
| Krok | Kod |
|---|---|
| Połączenie | $polaczenie = ("localhost", "root", "", "gry"); |
| Zapytanie | $wynik = ($polaczenie, "SELECT nazwa, punkty FROM gry ORDER BY punkty DESC LIMIT 5"); |
| Pętla | while ($wiersz = ($wynik)) { echo $wiersz[0] . " " . $wiersz[1]; } |
| Zamknięcie | ($polaczenie); |
Uzupełnij odpowiedzi na podstawie tabeli arkusza i sekcji Krok po kroku:
| Pytanie | Odpowiedź |
|---|---|
| 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[].
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.
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.
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).
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.
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.
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.
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.
To zagadnienie pojawiło się w zadaniach części praktycznej CKE:
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: