KWALIFIKACJA INF3 - STYCZEŃ 2020

PYTANIE NR 36.
W języku PHP, aby prawidłowo obsłużyć połączenie z bazą danych MySQL, ostatnią operacją, powinno być zastosowanie polecenia
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Funkcja mysqli_close służy do jawnego zamknięcia połączenia utworzonego w rozszerzeniu MySQLi, co zwalnia zasoby serwera (np. gniazdo sieciowe).
mysql_close dotyczy usuniętego rozszerzenia mysql, a exit i die kończą skrypt, nie będąc operacją zarządzania połączeniem.

Pełne wyjaśnienie:

W PHP połączenie z bazą danych MySQL obsługiwane przez MySQLi jest zasobem, który zajmuje zasoby po stronie aplikacji i serwera (m.in. pamięć oraz gniazdo sieciowe). Dlatego po zakończeniu pracy z bazą (wykonaniu zapytań, ewentualnym zwolnieniu wyników) dobrą praktyką jest jawne zamknięcie połączenia.

Właściwą funkcją do tego celu w stylu proceduralnym jest mysqli_close() (np. mysqli_close($connection)). W stylu obiektowym analogiczną operacją jest wywołanie metody $connection->close(). Zamknięcie połączenia na końcu kodu jest szczególnie istotne w skryptach długo działających (CRON, procesy w tle), gdzie pozostawione połączenia mogą prowadzić do wyczerpania limitu połączeń lub "wycieków" zasobów.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • mysql_close – dotyczy starego rozszerzenia mysql, które było przestarzałe i zostało usunięte w nowszych wersjach PHP. W kodzie opartym o MySQLi nie jest to właściwa funkcja, a w nowoczesnym PHP może w ogóle nie istnieć.
  • exit – kończy wykonywanie skryptu. Choć zakończenie skryptu zwykle powoduje sprzątanie zasobów, nie jest to poprawna "operacja obsługi połączenia" ani dobra praktyka do kontrolowanego domykania połączenia w logice aplikacji.
  • die – działa analogicznie do exit, kończąc skrypt (często z komunikatem). To mechanizm przerywania działania programu, a nie funkcja do zarządzania cyklem życia połączenia z bazą.

W praktyce typowy, poprawny schemat pracy wygląda tak: nawiązanie połączenia → wykonanie zapytań → (opcjonalnie) zwolnienie wyników → zamknięcie połączenia. Dzięki temu kod jest czytelny, a aplikacja lepiej kontroluje wykorzystanie zasobów.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
mysqli_close() to funkcja zamykająca połączenie utworzone w rozszerzeniu MySQLi. Jej wywołanie zwalnia zasoby związane z połączeniem (np. gniazdo sieciowe). Stosuje się ją po zakończeniu zapytań do bazy, aby kod jasno domykał cykl życia połączenia.
mysql_close() dotyczy starego rozszerzenia mysql, które zostało wycofane i w nowszych wersjach PHP nie jest dostępne. W praktyce współcześnie używa się MySQLi lub PDO, więc zamykanie połączenia realizuje się przez mysqli_close() albo odpowiednią metodę w PDO.
Typowy schemat to: nawiązanie połączenia (np. mysqli_connect) → wykonanie zapytań → ewentualne zwolnienie wyników → zamknięcie połączenia (mysqli_close). Taki porządek ułatwia utrzymanie kodu i ogranicza ryzyko problemów z zasobami w dłuższych procesach.
W typowych skryptach webowych PHP zazwyczaj zwalnia zasoby na końcu wykonania skryptu, co często oznacza też zamknięcie połączeń. Jednak jawne wywołanie mysqli_close() jest dobrą praktyką: kod jest czytelniejszy i bezpieczniejszy w skryptach długo działających.
Szczególnie ważne jest w skryptach długo działających, np. zadaniach CRON, workerach lub procesach w tle. Tam brak domknięcia może kumulować otwarte połączenia i doprowadzić do wyczerpania limitu połączeń na serwerze bazy. W krótkich żądaniach HTTP bywa mniej krytyczne.
exit i die przerywają wykonywanie skryptu, więc nie są "operacją bazodanową". Mogą zakończyć program zanim wykonasz zaplanowane sprzątanie (np. zwolnienie wyników, zapis logów). Poprawna obsługa połączenia to kontrolowane zamknięcie przez mysqli_close().
W stylu obiektowym zamiast funkcji proceduralnej wywołuje się metodę obiektu połączenia, np. $connection->close(). To ta sama czynność co mysqli_close($connection), tylko w innym stylu zapisu. Na egzaminie ważne jest rozpoznanie, że chodzi o MySQLi.
Najczęstszy błąd to mylenie prefiksów: wybór mysql_* zamiast mysqli_*, bo nazwy są podobne. Drugi błąd to traktowanie exit/die jako "zamknięcia bazy". Warto zapamiętać: MySQLi ma literę i jak "improved".
Jeśli pracujesz z wynikami zapytań zwracającymi zestaw danych, często stosuje się zwolnienie wyniku (np. funkcją do zwalniania wyniku w MySQLi) przed zamknięciem połączenia. To porządkuje wykorzystanie pamięci. Następnie zamyka się połączenie przez mysqli_close().
Przećwicz pełny cykl: połączenie → zapytanie → obsługa błędów → zamknięcie połączenia. Ucz się rozróżniać rozszerzenia (MySQLi vs stare mysql) oraz pamiętaj o dobrych praktykach zasobów. W zadaniach testowych zwracaj uwagę, czy w treści jest mowa o MySQLi.
info

Około 62% zdających odpowiada poprawnie na to pytanie. średnie

Źródła:

  • PHP Manual: mysqli_close — https://www.php.net/manual/en/mysqli.close.php (accessed 2026-02-24)
  • PHP Manual: mysql_close — https://www.php.net/manual/en/function.mysql-close.php (accessed 2026-02-24)
  • PHP Manual: Migration 7.0.x — Removed extensions and SAPIs (mysql) — https://www.php.net/manual/en/migration70.removed-exts-sapis.php (accessed 2026-02-24)

Materiały:

  • Dokumentacja PHP: MySQLi (opis funkcji mysqli_close i mysqli_connect)
  • Dokumentacja migracji do PHP 7: usunięte rozszerzenia (mysql)
  • Materiały o dobrych praktykach zarządzania zasobami w PHP (np. zwalnianie wyników, domykanie połączeń)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego