PHP: $link = mysqli_connect( MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK ) or die("Error " . mysqli_error($link)); ... много чего происходит ... if(условие){ что-то происходит; exit; } else { происходит то что нужно; } mysqli_close($link); У меня вот такой кусочек кода. Правильно ли я понимаю, что если внутри if стоит exit;, то после этого mysqli_close уже не происходит? Нужно ли переписать так: PHP: $link = mysqli_connect( MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK ) or die("Error " . mysqli_error($link)); ... много чего происходит ... if(условие){ что-то происходит; mysqli_close($link); exit; } else { происходит то что нужно; mysqli_close($link); } Спасибо!
@Arnika, нет не нужно. Соединение закрывается автоматически после того как скрипт отработал. Т.е. сразу после exit() соединение закроется автоматически. Закрывать соединение считается правилом хорошего тона при написании кода. Особенно когда код объёмный, после того как получены все необходимые данные из БД и перед тем как происходит их дальнейшая обработка на уровне РНР соединение желательно закрыть. Другое дело, что exit() это в основном для отладки кода (если не юзаешь дебаггер) и в реальном приложении его быть не должно.
Можно и переписать. У нас, например, когда нужно сделать выход при открытом соединении, пишут что-то вроде prepare_for_exit(). Смысл в том, чтобы не раскидывать mysqli_close() по коду, а делать закрытие соединения в одном предопределенном месте. Вот пример «жирного» контроллера с кодом «prepare for exit» (реализован в виде двух команд $r0[...]=...): https://gency.ru/comment/69 (обработка перехода по этой ссылке – пример работы контроллера; на этом форуме тоже используется подобный контроллер). P.S. Как выше написали, «сборщик мусора» должен нормально сработать и без того, но «правилом хорошего тона» является явное закрытие, освобождение и т.п. всего, что вы используете, тем более что у пыха есть определенные проблемы со сборкой мусора.