I don't know if this is relevant but DBD::mysql checks for a lost
connection in many places in the code and will automatically try
to reconnect 'behind the scenes' (except when AutoCommit is off).
Maybe there's some interaction/bug with that logic. Hopefully a trace
would show what's going on.
Tim.
On Sat, Jan 04, 2003 at 12:30:10AM -0800, Ask Bjoern Hansen wrote:
>
> Without the extra ping (see the line following the XXX comment) this
> program fails on the second "select ..." with
>
> "DBD::mysql::db selectrow_array failed: Lost connection to MySQL server during query
>at dbitest line 19."
>
> Why do I need to ping twice?
>
> I am using perl 5.6.1, DBI 1.21 and DBD::mysql 2.1011.
>
> I also tried upgrading DBI to 1.32 and DBD::mysql to 2.1022; but it
> didn't change anything.
>
>
> - ask
>
>
> #!/usr/bin/perl -w
> use strict;
> use DBI;
>
> my $dbh_cache;
> sub db_open {
> ## XXX - add an extra ping so the second ping will work properly!
> #$dbh_cache and $dbh_cache->ping;
> return $dbh_cache if $dbh_cache and $dbh_cache->ping;
> return $dbh_cache = DBI->connect("dbi:mysql:cswwwdata;user=root")
> }
>
> my $dbh = db_open();
> my $thread_id = $dbh->{'mysql_thread_id'};
> my ($count) = $dbh->selectrow_array(q[select count(*) from cities]);
> system(qq[mysqladmin -uroot kill $thread_id]);
>
> $dbh = db_open();
> ($count) = $dbh->selectrow_array(q[select count(*) from cities]);
>
> 1;
>
> --
> ask bjoern hansen, http://www.askbjoernhansen.com/ !try; do();