Thanks Perrin, your always full of good answers :)

> On Thu, 2003-10-23 at 13:00, Levon Barker wrote:
>> Should I be making new statement handlers for every new request?
>
> You don't have to, but if you don't and the Oracle connection gets lost
> and Apache::DBI reconnects, your stale statement handles will all fail.
> The best thing to do is use prepare_cached.  This will use an already
> prepared statement handle if possible.
>
>> package SomeModuleWhichShowsUpAsaAPage;
>>
>> my $dbh = DBI->connect ( 'dbi:Oracle:paprodi','test', 'test',
>>                                  {
>>                                     RaiseError => 1,
>>                                     AutoCommit => 0
>>                                  }
>>                      ) || die "Oracle database connection not made";
>>
>> my $sql = "select title from industry where id = ?";
>> my $sth = $dbh->prepare($industrySql);
> [...]
>> sub get_industry_str {
>>      my $id = shift;
>>      $sth->execute($id);
>>      my $title;
>>      $sth->bind_col( 1, \$title);
>>      $while ($sth->fetch) {
>>      }
>>      return $title;
>> }
>
> Do you load this module from startup.pl or httpd.conf?  If you load this
> before apache forks, it will create a database connection and statement
> handle, and then try to use them after the fork.  (Your sub that refers
> to $sth is a closure.)
>
> You should not open a database handle before the fork.  Instead, open it
> in your handler method, and create a new $sth (with prepare_cached).
> Apache::DBI and prepare_cached will take care of caching these for you.
>
> - Perrin
>


Levon Barker
Portfolio Aid
416-413-4053

Reply via email to