Память в MySQL

malls
На сайте с 08.08.2005
Offline
255
819

Может быть вопрос дурацкий, но плохо знаю связку пыхи и мускуля, потому лучше спрошу...

Вариант кода:

$query = 'SELECT * FROM `table`;

// коннект к серверу
if (!($mydb = mysql_connect($mysql_host, $mysql_user, $mysql_pass)))
die('mysql_connect: Unable to connect to server');

// выбираем базу
if (!mysql_select_db($mysql_database))
die('mysql_select_db: '.mysql_error($mydb));

// запрос
if (!($answ = mysql_query($query, $mydb)))
die('mysql_query: '.mysql_error($mydb));

// закрываем коннект
mysql_close($mydb);

while ($row = mysql_fetch_array($answ)) {
// делаем то что нам надо
}

// освобождаем память
mysql_free_result($answ);

Те же яйца, "вид сбоку":

$query = 'SELECT * FROM `table`;

while ($row = mysql_fetch_array(db($query))) {
// делаем то что нам надо
}

unset($answ);

function db($query){

// коннект к серверу
if (!($mydb = mysql_connect($mysql_host, $mysql_user, $mysql_pass)))
die('mysql_connect: Unable to connect to server');

// выбираем базу
if (!mysql_select_db($mysql_database))
die('mysql_select_db: '.mysql_error($mydb));

// запрос
if (!($answ = mysql_query($query, $mydb)))
die('mysql_query: '.mysql_error($mydb));

// закрываем коннект
mysql_close($mydb);

return($answ);
}

Вопрос: Происходит ли, при выходе из функции db(), освобождение памяти, которое в первом случае делается явно в виде mysql_free_result?

Иначе говоря если я во втором случае сделаю unset($answ); будет ли ситуация с памятью полностью аналогична первому варианту, или под мускул отдельно что-то резервируется?

[Удален]
#1

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

N
На сайте с 06.05.2007
Offline
419
#2

Что-то вы курите. нельзя закрывать соединение до тех пор пока не получены данные.

Если это и работает, то только потому что php действительно буферизирует данные.

Попробуйте использовать mysql_unbuffered_query() если для вас так важна экономия памяти PHP (но не в mysql). И да, mysql_close() все освобождает.

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий