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

Słowa kluczowe: Boolean w PHP Funkcja mysql_connect() w PHP

Jaka treść komunikatu powinna być wstawiona w przedstawionym kodzie PHP zamiast znaków zapytania?

mysqli_report(MYSQLI_REPORT_OFF);
$a = mysqli_connect('localhost', 'adam', 'mojeHaslo');
if (!$a)
    echo "?????????????";
A. Błąd przetwarzania zapytania SQL
B. Wybrana baza nie istnieje.
C. Pomyślnie dodano rekord do bazy.
D. Błąd połączenia z serwerem SQL

Opracowane na podstawie zadania CKE, czerwiec 2016 (arkusz E.14-X-16.05): W arkuszu użyto funkcji mysql_connect, usuniętej w PHP 7. Zastąpiono ją mysqli_connect; mysqli_report(MYSQLI_REPORT_OFF) sprawia, że błąd połączenia zwraca false.

W tym fragmencie kodu sprawdzany jest wynik funkcji mysqli_connect, czyli samo połączenie z serwerem MySQL/MariaDB. Zmienna $a dostaje uchwyt połączenia, jeśli wszystko pójdzie dobrze, albo wartość false, jeżeli połączenia nie udało się zestawić. Warunek !$a oznacza więc: jeśli nie ma poprawnego połączenia, wyświetl komunikat o błędzie. Dlatego sensowna treść komunikatu to Błąd połączenia z serwerem SQL. Funkcja mysqli_report(MYSQLI_REPORT_OFF) wyłącza automatyczne raportowanie błędów w stylu wyjątków lub ostrzeżeń, więc programista sam musi sprawdzić wynik działania funkcji. W praktyce często dopisuje się jeszcze mysqli_connect_error(), żeby zobaczyć dokładny powód, np. zły login, złe hasło, wyłączony serwer albo niepoprawny host. Moim zdaniem to ważny nawyk: najpierw sprawdzamy połączenie, potem wybór bazy, a dopiero później wykonujemy zapytania SQL. Taki podział bardzo ułatwia diagnozowanie błędów w aplikacji webowej.
Warto tu rozdzielić kilka różnych etapów pracy z bazą danych, bo właśnie ich pomieszanie najczęściej prowadzi do złej odpowiedzi. Pokazany kod nie sprawdza, czy istnieje konkretna baza danych. W wywołaniu mysqli_connect podano tylko host, nazwę użytkownika i hasło, bez czwartego parametru z nazwą bazy. Problem z nieistniejącą bazą pojawiłby się dopiero przy próbie jej wskazania, na przykład przez czwarty argument funkcji mysqli_connect albo przez mysqli_select_db. Wtedy komunikat o braku wybranej bazy miałby sens, ale nie w tym miejscu programu. Kod nie wykonuje też żadnego zapytania SQL, więc nie można mówić o błędzie przetwarzania zapytania. Nie ma tu mysqli_query, instrukcji SELECT, INSERT, UPDATE ani DELETE. Z mojego doświadczenia uczniowie czasem widzą słowo SQL i od razu myślą o zapytaniu, ale tutaj chodzi o niższy poziom: zestawienie połączenia z serwerem. Tak samo komunikat o pomyślnym dodaniu rekordu jest zupełnie poza kontekstem. Dodawanie rekordu wymagałoby zapytania INSERT oraz sprawdzenia jego wyniku, a nie samego połączenia. Dobra praktyka jest taka: osobny komunikat dla błędu połączenia, osobny dla wyboru bazy, osobny dla błędu zapytania i dopiero osobny dla powodzenia operacji na danych. Dzięki temu aplikacja jest czytelniejsza i łatwiej ją debugować, szczególnie gdy działa już na prawdziwym serwerze, a nie tylko lokalnie.

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.