Соединение с базой данных MySQL не закрыто: что будет? - PullRequest
10 голосов
/ 24 июля 2011

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

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

Ответы [ 4 ]

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

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

2 голосов
/ 25 июля 2011

С php.net:

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

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

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

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

1 голос
/ 24 июля 2011

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

1 голос
/ 24 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...