Thomas: $dbh->disconnect() macht gar nichts!?

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

  1. 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

    1. 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.

      1. 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*

        1. 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.

  2. 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

    --
    no strict;
    no warnings;
    Zucker ist das, was dem Kaffee den schlechten Geschmack gibt, wenn man es nicht hineintut.
    1. 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