KWALIFIKACJA INF3 - CZERWIEC 2020

PYTANIE NR 26.
Wskaż warunek w języku PHP sprawdzający, czy zmienna $conn NIE zawiera prawidłowego obiektu połączenia z bazą MySQL po wywołaniu funkcji mysqli_connect().
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Po wywołaniu mysqli_connect() zmienna $conn zawiera obiekt mysqli przy sukcesie albo FALSE przy błędzie. Warunek if (!$conn) poprawnie wykrywa sytuację, gdy $conn nie jest prawidłowym obiektem połączenia (wartość falsy). Pozostałe opcje sprawdzają globalny stan błędu lub używają luźnego porównania z NULL.

Pełne wyjaśnienie:

Funkcja mysqli_connect() służy do nawiązania połączenia z serwerem MySQL przy użyciu rozszerzenia MySQLi. Jej wynik jest kluczowy dla dalszej pracy aplikacji:

  • gdy połączenie się powiedzie, zwracany jest obiekt mysqli (wartość "truthy" w PHP),
  • gdy połączenie się nie powiedzie, zwracane jest FALSE (wartość "falsy").

Dlatego warunek "if (!$conn) { /* obsługa błędu */ }" jest poprawny: operator ! zadziała wtedy, gdy $conn nie zawiera prawidłowego obiektu połączenia, czyli w praktyce gdy połączenie się nie udało i zwrócono FALSE.

Odpowiedź "if (mysqli_connect_errno())" oraz "if (mysqli_connect_error())" mogą być użyteczne diagnostycznie, bo odnoszą się do kodu i opisu ostatniego błędu połączenia. Jednak nie sprawdzają one bezpośrednio, czy zmienna $conn zawiera prawidłowy obiekt połączenia. To inne kryterium: badają stan błędu raportowany przez MySQLi, a nie typ/wartość zmiennej połączenia.

Opcja "if ($conn == null)" jest problematyczna, bo po nieudanym połączeniu $conn ma wartość FALSE, a nie NULL. Dodatkowo użyto porównania luźnego ==, które może prowadzić do nieintuicyjnych wyników przez konwersję typów. W kodzie produkcyjnym, gdy naprawdę trzeba porównywać do NULL, zwykle stosuje się porównanie ścisłe === i jasno określa, skąd może się wziąć NULL.

W praktyce najprostszy i czytelny wzorzec to: najpierw sprawdzić wynik $conn (np. !$conn), a następnie – jeśli jest błąd – ewentualnie pobrać szczegóły przez funkcje błędu i zalogować komunikat. Dzięki temu warunek jest zgodny z tym, co faktycznie trzymamy w zmiennej połączenia.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Przy powodzeniu mysqli_connect() zwraca obiekt mysqli, a przy błędzie zwraca FALSE. To właśnie ta różnica (obiekt vs wartość falsy) umożliwia proste sprawdzenie wyniku połączenia warunkiem typu if (!$conn).
Najczęściej stosuje się if (!$conn), bo wykrywa sytuację, gdy $conn jest wartością falsy (w praktyce FALSE po nieudanym połączeniu). To jest bezpośrednie sprawdzenie zmiennej, a nie dodatkowych funkcji diagnostycznych.
mysqli_connect_errno() zwraca kod ostatniego błędu połączenia raportowany przez MySQLi. To informacja o stanie błędu, a nie test typu/wartości zmiennej $conn. Można jej użyć do diagnostyki, ale pytanie o "zawartość $conn" rozstrzyga się przez sprawdzenie $conn.
Tak, bo mysqli_connect_error() zwraca opis błędu (np. tekst) po nieudanym połączeniu, a przy braku błędu zwykle nie zwraca komunikatu. Jest to jednak metoda diagnostyczna; gdy zadanie dotyczy tego, czy $conn jest prawidłowym obiektem, właściwsze jest sprawdzenie samej zmiennej.
Po nieudanym mysqli_connect() zmienna $conn ma wartość FALSE, a nie NULL. Dodatkowo użycie == (porównanie luźne) może maskować problem przez konwersję typów. W egzaminie i praktyce lepiej opierać się na tym, co funkcja rzeczywiście zwraca.
FALSE oznacza niepowodzenie operacji (np. błąd połączenia), a NULL zwykle oznacza "brak wartości" lub "niezainicjalizowane". W MySQLi nieudane połączenie daje FALSE, więc poprawny test to wykrycie wartości falsy, a nie sprawdzanie, czy jest NULL.
Gdy po wykryciu nieudanego połączenia chcesz poznać konkretny kod błędu i np. zróżnicować reakcję (logowanie, komunikat dla użytkownika). Typowy schemat to: najpierw if (!$conn), a dopiero potem pobranie szczegółów przez mysqli_connect_errno() lub mysqli_connect_error().
Nie. Stare funkcje z rodziny mysql_* zostały usunięte w nowszych wersjach PHP, więc w praktyce i na egzaminie stosuje się MySQLi albo PDO. Dlatego pytania zwykle odnoszą się do mysqli_connect() i sposobu obsługi błędów w tym rozszerzeniu.
Najczęstsze to: mylenie FALSE z NULL, używanie porównania luźnego bez zrozumienia konwersji typów, oraz wybieranie funkcji diagnostycznych (errno/error) mimo że pytanie dotyczy bezpośrednio zmiennej połączenia. Warto czytać, czy pytanie mówi o $conn, czy o błędzie.
Najpierw sprawdź wynik: if (!$conn). Następnie zaloguj szczegóły (np. mysqli_connect_errno() i mysqli_connect_error()) i zakończ działanie lub przejdź do trybu awaryjnego. Unikaj pokazywania pełnych danych błędu użytkownikowi końcowemu w środowisku produkcyjnym.
info

Statystycznie 37% uczniów zna prawidłową odpowiedź. bardzo trudne

Według specjalistów z branży: "Po wywołaniu mysqli_connect() zmienna $conn zawiera obiekt mysqli przy sukcesie albo FALSE przy błędzie."

Źródła:

  • PHP Manual: mysqli_connect — https://www.php.net/manual/en/mysqli.connect.php (accessed 2026-02-27)
  • PHP Manual: mysqli_connect_errno — https://www.php.net/manual/en/mysqli.connect-errno.php (accessed 2026-02-27)
  • PHP Manual: mysqli_connect_error — https://www.php.net/manual/en/mysqli.connect-error.php (accessed 2026-02-27)

Materiały:

  • Oficjalna dokumentacja PHP: rozdział MySQLi (mysqli_connect, mysqli_connect_errno, mysqli_connect_error)
  • Kurs/opracowanie o typach w PHP i zasadach truthy/falsy
  • Materiały do INF.3 o komunikacji aplikacji WWW z bazą danych MySQL (warstwa DAL, obsługa błędów)

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego