Hello Guru,
I got unexpected error using CGI::Session + DBD::SQLite.
This is my simple perl program:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use CGI::Session;
my $session = new CGI::Session(
'driver:sqlite;serializer:Storable',
"91b85831787f534e3f9b6448da10af18",
{DataSource => 'db/sessions.db'}
) or die (CGI::Session->errstr);
But it returns warnings all the times:
DBI::db=HASH(0x89601c)->disconnect invalidates 1 active statement hand
+le (either destroy statement handles or call finish on them before di
+sconnecting) at /Library/Perl/5.8.8/CGI/Session/Driver/DBI.pm line 13
+3.
closing dbh with active statement handles at /Library/Perl/5.8.8/CGI/S
+ession/Driver/DBI.pm line 133.
After little investigation I found that this problems goes from this code snippet:
/Library/Perl/5.8.8/CGI/Session/Driver/DBI.pm:
[...]
sub retrieve {
my $self = shift;
my ($sid) = @_;
croak "retrieve(): usage error" unless $sid;
my $dbh = $self->{Handle};
my $sth = $dbh->prepare_cached("SELECT a_session FROM " . $self->t
+able_name . " WHERE id=?", undef, 3);
unless ( $sth ) {
return $self->set_error( "retrieve(): DBI->prepare failed with
+ error message " . $dbh->errstr );
}
$sth->execute( $sid ) or return $self->set_error( "retrieve(): \$s
+th->execute failed with error message " . $sth->errstr);
my ($row) = $sth->fetchrow_array();
return 0 unless $row;
return $row;
}
[...]
If substitute
prepare_cached with
prepare my program executes without warnings.
But maybe exist solution how to fix it without modification of CGI::Session?
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.