On Tue, 2007-07-31 at 14:36 +0800, Ken Perl wrote:
> OK, got it. Is it possible to use the same db connections in one
> request? if yes, could you please show me how to implement this if a
> cgi script calls many times other perl modules which requests db
> connections to work.
> 


Yes it is, although I'm not sure about using it with straight CGI (ie
not via ModPerl::Registry/PerlRun etc).

The opening lines of Apache::DBI contain this:

---------------------------------------
use constant MP2 => (exists $ENV{MOD_PERL_API_VERSION} &&
                     $ENV{MOD_PERL_API_VERSION} == 2) ? 1 : 0;
BEGIN {
    if (MP2) {
        require mod_perl2;
        require Apache2::Module;
        require Apache2::ServerUtil;
    }
    elsif (defined $modperl::VERSION && $modperl::VERSION > 1 &&
             $modperl::VERSION < 1.99) {
        require Apache;
    }
}
---------------------------------------

So I would assume that if you use Apache::DBI in a CGI script, it's not
going to have the MOD_PERL* environment variables set, and so it will
assume mod_perl version 1, and require Apache.  

However, I see no reason to load the Apache.pm module in your case - you
don't need it.

What you could do instead is to use DBI's connect_cached method, which
provides similar functionality.  I actually use this instead of
Apache::DBI, even when running under mod_perl.

In either case, the way to reuse connections is to ensure that your
connect call is exactly the same.  Even changing the order of parameters
will force Apache::DBI / connect_cached to generate a new connection.

Clint

Reply via email to