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

mysqli_report(MYSQLI_REPORT_OFF); $db = mysqli_connect("localhost", "root", "qwerty", "baza1"); if ( !$db ) { … } Przedstawiony kod PHP nawiązuje...

mysqli_report(MYSQLI_REPORT_OFF);
$db = mysqli_connect("localhost", "root", "qwerty", "baza1");
if ( !$db ) {
   …
}
Przedstawiony kod PHP nawiązuje połączenie z serwerem bazy danych. Jakiego typu operacje powinny się znaleźć w instrukcji warunkowej w miejscu trzech kropek?
A. Obsługa danych pobranych z bazy.
B. Zamknięcie bazy danych.
C. Komunikat o pomyślnym połączeniu z bazą.
D. Obsługa błędu połączenia.

Opracowane na podstawie zadania CKE, styczeń 2020 (arkusz EE.09-SG-20.01): Dodano mysqli_report(MYSQLI_REPORT_OFF) - od PHP 8.1 nieudane mysqli_connect domyślnie zgłasza wyjątek zamiast zwracać false.

Poprawna odpowiedź to Obsługa błędu połączenia. Funkcja mysqli_connect(...) próbuje zestawić połączenie z serwerem MySQL i wybraną bazą. Jeżeli operacja się nie powiedzie, zwraca wartość false. Warunek if (!$db) sprawdza właśnie taki przypadek: operator ! odwraca wartość logiczną, więc blok instrukcji zostanie wykonany tylko wtedy, gdy połączenie nie zostało utworzone. W tym miejscu powinien znaleźć się kod reagujący na błąd, np. wyświetlenie kontrolowanego komunikatu, zapis informacji do logu albo zakończenie skryptu funkcją exit. Do zapamiętania: po wywołaniu mysqli_connect należy sprawdzić wynik przed wykonywaniem zapytań SQL. Przy wyłączonym raportowaniu mysqli_report(MYSQLI_REPORT_OFF) błąd nie zostanie automatycznie rzucony jako wyjątek, dlatego kontrola wyniku ma praktyczne znaczenie.
W tym fragmencie najłatwiej pomylić etap nawiązywania połączenia z etapem pracy na już otwartej bazie. Warunek if (!$db) oznacza: wykonaj blok wtedy, gdy zmienna $db nie zawiera poprawnego uchwytu połączenia, czyli gdy mysqli_connect(...) zwróciło false. Dlatego właściwa treść to Obsługa błędu połączenia. Zamknięcie bazy danych wykonuje się dopiero po udanym połączeniu i zakończeniu pracy, zwykle przez mysqli_close($db); nie ma czego zamykać, gdy połączenie nie powstało. Obsługa danych pobranych z bazy byłaby potrzebna po poprawnym wykonaniu zapytania, na przykład po mysqli_query i pobraniu rekordów z wyniku. Komunikat o pomyślnym połączeniu z bazą pasowałby do gałęzi wykonywanej, gdy $db ma wartość prawdziwą, a nie do warunku z negacją. Typowy błąd myślowy polega na odczytaniu if (!$db) jak zwykłego potwierdzenia połączenia, bez uwzględnienia operatora !.

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.