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

W bibliotece mysqli języka PHP, aby uzyskać ostatni komunikat o błędzie, można zastosować funkcję

A. mysqli_errno()
B. mysqli_use_result()
C. mysqli_error_list()
D. mysqli_error()

Pytanie z egzaminu CKE, styczeń 2023 (arkusz EE.09-SG-23.01).

Funkcja mysqli_error() służy do pobrania tekstowego opisu ostatniego błędu, który wystąpił podczas pracy z połączeniem MySQLi. W praktyce używa się jej wtedy, gdy zapytanie SQL się nie wykonało, połączenie z bazą nie działa poprawnie albo chcemy zapisać informację diagnostyczną do logów. Typowy przykład to: $wynik = mysqli_query($polaczenie, $sql); if (!$wynik) { echo mysqli_error($polaczenie); }. Dzięki temu dostajemy konkretny komunikat, np. że tabela nie istnieje, kolumna ma złą nazwę albo składnia SQL jest niepoprawna. Moim zdaniem to jedna z tych funkcji, które bardzo pomagają przy nauce PHP z bazą danych, bo od razu widać, gdzie jest problem. W kodzie produkcyjnym nie powinno się jednak pokazywać takich komunikatów zwykłemu użytkownikowi, bo mogą zdradzać strukturę bazy. Lepsza praktyka to zapis do logów i pokazanie użytkownikowi neutralnego komunikatu. W nowszych projektach często stosuje się też mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT), czyli obsługę błędów przez wyjątki, ale sama odpowiedź na pytanie jest jasna: tekst ostatniego błędu zwraca mysqli_error().
W tym pytaniu łatwo pomylić kilka funkcji z biblioteki MySQLi, bo wszystkie brzmią podobnie i dotyczą pracy z bazą danych, ale ich zadania są różne. Jeśli celem jest uzyskanie ostatniego komunikatu o błędzie, czyli tekstowego opisu problemu, właściwa jest funkcja mysqli_error(). Nie chodzi tutaj ani o pobranie wyniku zapytania, ani o sam numer błędu, ani o pełną listę informacji w strukturze tablicowej.

mysqli_use_result() nie służy do diagnostyki błędów. Ta funkcja pobiera wynik zapytania w trybie niebuforowanym, czyli rekordy są odczytywane bez wcześniejszego załadowania całego zestawu wyników do pamięci. Przydaje się to czasem przy dużych wynikach SELECT, ale nie zwróci komunikatu typu „Unknown column” albo „Syntax error”. Typowy błąd myślowy polega tu na tym, że skoro funkcja ma w nazwie result, to ktoś kojarzy ją ogólnie z wynikiem operacji, także błędu. A to nie ten kierunek.

mysqli_errno() zwraca numer ostatniego błędu, na przykład kod liczbowy nadany przez MySQL. To jest przydatne, szczególnie gdy program ma reagować automatycznie na konkretne sytuacje, ale numer nie jest komunikatem tekstowym. Z mojego doświadczenia wynika, że na etapie nauki sam numer błędu często niewiele mówi, dopóki nie sprawdzi się dokumentacji.

mysqli_error_list() również dotyczy błędów, ale zwraca listę błędów w postaci tablicy, zwykle z polami takimi jak errno, sqlstate i error. To bardziej rozbudowana forma diagnostyki, a nie proste pobranie ostatniego komunikatu jako tekstu. W dobrym kodzie warto rozumieć różnicę: mysqli_errno() daje kod, mysqli_error_list() daje strukturę z informacjami, a mysqli_error() daje czytelny opis ostatniego błędu.

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.