Соединение базы данных MySQL не закрыто: что произойдет?

Я использую PHP для запроса базы данных MySQL на своем веб-сайте. Пожалуйста, ответьте на следующие вопросы:

  1. Что произойдет, если я не буду использовать mysql_close() когда я закончил с запросом базы данных в конце? Соединение останется открытым? Если да, то сколько времени? Если нет, то почему?
  2. Если я открываю и закрываю соединение с MySQL в нескольких местах на веб-странице, как влияет производительность? т.е. соединение выполняется снова каждый раз, когда на одной веб-странице требуется некоторый доступ к базе данных.
  3. Как mysql_close() относится к производительности? Должен ли я открывать новое соединение каждый раз, когда требуется некоторый доступ к базе данных ИЛИ мне нужно сохранить только одно соединение и закрыть его в конце?
  4. Если я не закрываю соединение, то если пользователь пытается снова получить доступ к некоторым данным, будет ли использоваться новое соединение или будет использоваться старое открытое соединение?

  1. Он будет автоматически закрываться, когда PHP-скрипт будет запущен во время фазы разрушения.
  2. Производительность будет отрицательно сказываться. Открытие нового сокета (особенно для внешнего сервера базы данных) является более дорогостоящим и трудоемким, чем просто сохранение указателя на текущее соединение в памяти.
  3. См. Ответ №. 2
  4. Доступ к данным будет выполняться с помощью нового запроса PHP. Следовательно, у вас будет новое соединение с базой данных. Проблем нет.

Я бы посоветовал открыть соединение с базой данных во время фазы построения, повторно использовать это соединение во время всего выполнения вашего сценария (если он основан на OO, назначить переменную класса для подключения к базе данных и использовать $this->db во время всего скрипта ) и закройте его во время уничтожения (или не заморачивайся при его закрытии, так как он все равно будет закрыт, даже если он не будет определен конкретно).

От php.net:

Использование mysql_close () обычно не требуется, поскольку непостоянные открытые ссылки автоматически закрываются в конце выполнения скрипта.

для производительности это зависит от ситуаций, как долго он используется, как долго он простаивает и т. д. (например, длительное выполнение). В большинстве случаев существует одноэлементный шаблон, по которому у вас есть одно открытое соединение, и делайте все запросы с помощью этого открытого дескриптора. Но это не совсем так, поскольку mysql_connect сам по себе является поддержкой:

Если второй вызов выполняется с mysql_connect () с теми же аргументами, новая связь не будет установлена, но вместо этого будет возвращен идентификатор ссылки уже открывшейся ссылки. Параметр new_link изменяет это поведение и заставляет mysql_connect () всегда открывать новую ссылку, даже если mysql_connect () был вызван ранее с теми же параметрами.

Таким образом, mysql_close не очень нужен, когда дело доходит до коротких сценариев.

Существует незначительная потеря производительности, чтобы закрыть соединение, по сравнению с использованием ресурсов, чтобы держать его открытым, когда он вам не нужен. Лучше закрыть соединение, как только вы закончите с ним, и откройте его снова, когда вам нужно.

Если вы используете непостоянные соединения, все открытые соединения MySQL будут автоматически закрыты, когда скрипт PHP завершит выполнение.