On Wed, Nov 10, 2004 at 12:51:56PM +0900, Batara Kesuma wrote:
> Hi Stas,
>
> > 1) use Apache::DBI
> >
> > 2) if not, refer to:
> > http://perl.apache.org/docs/2.0/user/handlers/http.html#PerlCleanupHandler
> > http://perl.apache.org/docs/2.0/user/coding/coding.html#Getting_the_C__r__Object
>
>
> Thank you for the answer. I tried to use Apache::DBI with
> dbi_connect_method => 'connect'. But I have a problem here, because I
> use 'our' on $dbh so other functions can use it. It looks like:
>
> ---
> sub show_name {
> our $dbh;
> my $sth = $dbh->prepare("SELECT name FROM member WHERE id=?");
> $sth->execute(1);
> ...
> }
>
> So even if I use dbi_connect_method => 'connect', the connection to the
> DB will be alive until the child die. I want to make the connection not
> persistent. The only way I know now is to unload Apache::DBI, then call
> $dbh->disconnect() at the end of every scripts. Is there any other more
> efficient way to do this with little change to the scripts themselves?
use strict;
our($dbh);
sub hander {
local $dbh = DBI->connect(...);
...
}
When your handler exits, the localized global goes out of scope. Voila.
You can also force a variable out of scope with:
undef $dbh;
'my' variables are slightly faster than globals, so you are better
off performance-wise to pass around the $dbh handle than to keep it
in a global, but since the code is already written, 'local'izing is
probably the most convenient thing to do.
Cheers,
Glenn
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html