Как правильно следует закрывать соединение с mysql

DenVeroid

Новичок
Как правильно следует закрывать соединение с mysql

Немогли бы подсказать когда именно нужно проставлять такие функции как

msql_close()
mysql_free_result();

я понимаю что их нужно устанавливать после выполнения запроса, так вот, всегда ли нужно
закрывать соединение msql_close, это не зависит от выполнения большого запроса или маленького,
ну допустим нам нужно вывести к примеру тысячю записей, мы их выводим и закрываем соединение,
или нам всего нужно вывести одно значение или проверить допустим на присутсвие того или иного
значения в базе данных тут цыкла нет, поэтому хотелось знать нужно в этом случии закрывать соединение,
ведь насколько я помню что с какой-то версии мускуль сам закрывает, но всёже нужноли закрывать самому?
и ещё по поводу функции mysql_free_result, когда следует её устанавливать ?

я понимаю что вопросы могут быть бональные, но всёже
 

ForJest

- свежая кровь
mysql_close происходит самостоятельно по завершению скрипта. Если только не был вызвал mysql_pconnect вместо mysql_connect.
mysql_free_result можно вызывать перед началом каждого нового запроса на выбоку данных. Я по крайней мере поступаю именно так.
Опять же по завершению скрипта освобождаются ВСЕ ресурсы, которые открыл скрипт.
вызов mysql_close может быть полезным на нагруженных системах без акселераторов. Т.е. когда мы уже получили нужные данные и больше нам соединение с БД не нужно.
Может иметь смысл высвободить его пораньше. Или на время "долгоиграющих вычислений" и потом его восстановить, при необходимости.
---------------
При этом следует помнить что операция установки соединения сама по себе доровольно "дорогостоящая".

В большинстве случаев закрытие соединения не требуется.
 

DenVeroid

Новичок
2ForJest, спасибо большое, единственное по mysql_free_result я так понял её желательно ставить перед выборкой больших данных а так её можно и не ставить. Ещё такой вопрос это сильно заметно на производительности?
 

Vadim S.

Новичок
DenVeroid, да.


mysql_free_result() нуждается в вызове только в том случае, если вы всерьёз обеспокоены тем, сколько памяти используют ваши запросы к БД, возвращающие большое количество данных. Вся память, используемая для хранения этих данных автоматически очистится в конце работы скрипта.
 

vovik

Новичок
Делать mysql_free_result() перед каким-то запросом - это чистой воды бред. Нужно понять что делает функция и пользоваться ей когда это необходимо.

Когда ты делаешь выборку из базы с помощью mysql_query(), все что база тебе передаст будет храниться в памяти. mysql_free_result() освобождает эту память. Соответственно, когда ты выберешь все из результата запроса с помощью mysql_fetch_*(), память можно освобождать.

Но если выборки маленькие, то на это можно забивать, так как после выполнения скрипта вся память, им занимаемая, освободится.

Лично я делаю _free_result() всегда. Привычка уже выработалась.

Что касается коннекта, то mysql_connect() устанавливает сетевое соединение с базой, а mysql_close() закрывает данное соединение. Закрытие также автоматически будет сделано после завершения работы скрипта. Соответственно и вызывать эти функции нужно тогда, когда нужно открывать или закрывать соединение.
 

DenVeroid

Новичок
vovik, тоесть mysql_free_result мы должны сделать сразу после mysql_fetch * тогда понятно..., спасибо
 

Фанат

oncle terrible
Команда форума
Соответственно, когда ты выберешь все из результата запроса с помощью mysql_fetch_*(), память можно освобождать.
вот только в веб-приложениях случаи, когда нужно такое освобождение, можно пересчитать по пальцам.
Да и те можно переделать по-человечески.
 
Сверху