$dbh->disconnect() macht gar nichts!?
Thomas
- perl
Hallo
Ich hab bei meinem Code mal ausversehen ein sql-statement unterhalb dem disconnect laufen lassen. Als dann kein Fehler kam war ich etwas verwirrt. Nach einem disconnect sollte man doch keinen Zugriff mehr auf die DB haben!?
<code>
use DBI;
$dbh = DBI->connect('DBI:mysql:host=127.0.0.1;database=mydb','root', 'mypw');
$dbh->disconnect() or print "Disconnection failed: $DBI::errstr\n";
print $dbh->selectrow_array("select name from maindata where id = 1");
</code>
Kann mir einer erklären was ich falsch mache? Ein bug kanns ja wohl nicht sein, sonst wär ich bestimmt nicht der erste der damit kommt. ^^
Gruss
Thomas
Ich meine es kommt nicht nur kein Fehler, sondern es wird sogar das richtige selektiert: Also nach dem disconnect funktioniert der select einwandfrei und es wird das richtige ausgegeben.
Ich wäre sehr dankbar, wenn das kurz einer mit perl/mysql testen könnte, ob das bei ihm auch so ist.
Gruss
Thomas
Ich wäre sehr dankbar, wenn das kurz einer mit perl/mysql testen könnte, ob das bei ihm auch so ist.
Bei mir kommt die Fehlermeldung:
DBD::mysql::st execute failed: MySQL server has gone away at DB.pm line 247.
Datenbankfunktion DB Fehler schlug fehl. Fehlermeldung: MySQL server has gone aw
ay at test.pl line 11
(DB.pm ist ein eigens Modul um das DBI Modul)
Struppi.
Habe die Lösung nun gefunden:
$dbh->{mysql_auto_reconnect} = 0;
Datenbankfunktion DB Fehler schlug fehl. Fehlermeldung: MySQL server has gone away at test.pl line 11
Diese Fehlermeldung kommt nun auch bei mir *freu*
Du bist nicht Niklaus?
Habe die Lösung nun gefunden:
$dbh->{mysql_auto_reconnect} = 0;
Zur Erklärung:
Gerade habe ich in der Perl NG genau die gleiche Frage gefunden und dort wurde folgender Ausschnitt aus der Doku präsentiert:
mysql_auto_reconnect
This attribute determines whether DBD::mysql will auto
matically reconnect to mysql if the connection be lost.
This feature defaults to off; however, if either the
GATEWAY_INTERFACE or MOD_PERL envionment variable is set,
DBD::mysql will turn mysql_auto_reconnect on. Setting
mysql_auto_reconnect to on is not advised if 'lock
tables' is used because if DBD::mysql reconnect to mysql
all table locks will be lost. This attribute is ignored
when AutoCommit is turned off, and when AutoCommit is
turned off, DBD::mysql will not automatically reconnect
to the server.
Struppi.
Hallo,
versuch mal:
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect(..);
die DBI::errstr if !$dbh;
$dbh->disconnect || print $dbh->errstr;
[..]
gruss
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect(..);
die DBI::errstr if !$dbh;
$dbh->disconnect || print $dbh->errstr;
immer noch das selbe. keine fehlermeldung, keine warnings, aber am schluss funktioniert ein select immer noch.
Ich hab übrigens:
Perl 5.8.0
DBI 1.41
Apache 2.0.53
MySQL 4.1