LINUX.ORG.RU

perl DBI mysql вопрос про finish()


0

0

всем здраствуте.
вопрос про функчию finish() из модуля DBI;
искал в интернете описание этой функции понял только что $sth->finish() освобождает память выделенную для $sth.(или ошибся?)
например есть код:
my $dbh = DBI->connect();

my $sth = $dbh->prepare();
$sth->execute();
$sth = $dbh->prepare();
$sth->execute();
$sth = $dbh->prepare();
$sth->execute();

$sth->finish();
$dbh->disconnect();

вопрос: $sth->finish() достаточно вызывать в самом конце программы как в примере или её нужно вызывать после каждого $sth->execute() ?
и что если её вообще не вызывать? ведь после завершения программы память и так очищается.

★★★★★

Последнее исправление: TDrive (всего исправлений: 1)

Indicate that no more data will be fetched from this statement handle before it is either executed again or destroyed. The finish method is rarely needed, and frequently overused, but can sometimes be helpful in a few very specific situations to allow the server to free up resources (such as sort buffers).

When all the data has been fetched from a SELECT statement, the driver should automatically call finish for you. So you should not normally need to call it explicitly except when you know that you've not fetched all the data from a statement handle. The most common example is when you only want to fetch one row, but in that case the selectrow_* methods are usually better anyway. Adding calls to finish after each fetch loop is a common mistake, don't do it, it can mask genuine problems like uncaught fetch errors. <..>

http://search.cpan.org/perldoc?DBI#finish

oh
()
Ответ на: комментарий от oh

с английским у меня не фонтан.
значит finish() освобождает ресурсы выделенные на хранение ответа mysql и её имеет смысл вызывать если mysql ответ большого размера. а так ресурсы и сами очищаются после завершения скрипта. я правильно понял? непонятно только один момент:
my $sth = $dbh->prepare();
$sth->execute();
$sth = $dbh->prepare();
$sth->execute();

после первого execute() в $sth ссылка на ответ mysql если вызиваем execute() второй раз получается в $sth ссылка на второй ответ mysql, а первый ответ остаётся в памяти но ссылка на него теряется и он висит в памяти до завершения программы?

TDrive ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.