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 !.