[DBD-SQLite] problems using sqlite with mod_perl in apache

Darren Duncan darren at darrenduncan.net
Wed Dec 2 04:27:23 GMT 2009


Mike Campbell wrote:
> Ok here is what I get.
> 
> Test using DBD::SQLite (same output when used command-line and via webpage)
> =====================
> the SQLite v3 is 1.27
> 
> Test using DBD::SQLite2 (same output when used command-line and via webpage)
> the SQLite v2 is 0.33
<snip>

At first glance you seem to be doing things adequately in your code samples.

However, your code looks very old-fashioned, maybe because you based it on old 
code you saw somewhere, and making it into more modern Perl can probably help.

For starters, when you are using DBI, *always* configure it to throw exceptions 
on errors rather than just return nothing.

Instead of this:

$db = DBI->connect("dbi:SQLite:dbname=/tmp/bugpush.db", "", "")
       || die( $DBI::errstr . "\n" );

... do this:

$db = DBI->connect("dbi:SQLite:dbname=/tmp/bugpush.db", "", "",
         { RaiseError => 1 });

That alone should go further towards you getting useful error messages when you 
should be.

Also you can remove all your tests like "if(! defined($sth) || ! ($sth))" or "if 
(! defined( $rc ) )".

When DBI is set to throw exceptions, you can just code as if each step will work 
and you don't need to test, since the program should die by itself if something 
goes wrong.

Instead, you just do tests when you want the program to not die but rather be 
more graceful when something goes wrong, and then you do it by setting up an 
exception handler (an "eval" block), but we don't need to get into that now.

So try making those changes and see what effect is has.

I'm not immediately in the position to run your code myself, not having mod_perl 
installed.

It would be helpful if you could provide more information on your setup.

What versions of Perl and DBI are you using, to start with.

To find out, you can use code like this:

   my $perlvers = $[;

   use DBI;
   my $dbivers = $DBI::VERSION;

Run that on both command-line and mod-perl as usual.

Also your versions of Apache and mod_perl are useful to know.

Also try running your code under FastCGI, or CGI, rather than mod_perl and see 
if that has any effect on the result.  Include the tests for what 
DBD::SQLite/etc version is running if necessary.

Maybe someone else on this list has ideas?

-- Darren Duncan




More information about the DBD-SQLite mailing list