Skrypt PHP otworzył połączenie funkcją mysqli_connect('localhost', 'root', '', 'szkola'), ale nie wywołał mysqli_close(). Co stanie się z tym połączeniem po zakończeniu wykonywania skryptu?
mysqli_close() nie jest błędem; funkcja jest zalecana, ale nieobowiązkowa.p:.Zwykłe połączenie otwarte przez mysqli_connect() żyje tylko tak długo jak skrypt. Po jego zakończeniu PHP zwalnia wszystkie zasoby, w tym połączenia z bazą, więc serwer MySQL widzi rozłączenie klienta. Dlatego brak mysqli_close() w krótkim skrypcie nie powoduje błędu.
Jawne zamknięcie ma jednak sens. Gdy skrypt po pobraniu danych długo jeszcze pracuje, na przykład generuje duży raport, połączenie niepotrzebnie zajmuje miejsce w limicie serwera (max_connections). Wyjątkiem są połączenia trwałe, otwierane z przedrostkiem p: przed nazwą hosta - te PHP celowo zostawia otwarte do ponownego użycia.
W krótkich skryptach strony różnica jest więc niewielka, ale nawyk jawnego zamykania połączenia się opłaca.
Obawa, że połączenie „wisi” aż do restartu serwera, wynika z przenoszenia nawyków z programów działających stale. Skrypt PHP przy typowej obsłudze strony kończy się po wysłaniu odpowiedzi, a wtedy interpreter sam zamyka zwykłe połączenia. Otwarte pozostają tylko połączenia trwałe, oznaczone przedrostkiem p:.
Brak mysqli_close() nie jest też błędem składni ani błędem wykonania, więc interpreter niczego nie zgłasza. Funkcja jest zalecana, ale nie obowiązkowa.
Nie ma również cofania zmian. MySQL domyślnie działa w trybie autocommit, w którym każde INSERT, UPDATE czy DELETE jest zatwierdzane od razu. Wycofane zostałyby tylko zmiany z rozpoczętej i niezatwierdzonej transakcji, a w treści zadania nie ma mowy o transakcji.
W praktyce warto mimo to zamykać połączenie jawnie, bo kod staje się czytelniejszy, a zasoby serwera zwalniane są wcześniej.