Andreas: MySQL Verbindung mit mysqlPP prüfen

Beitrag lesen

Hi fastix®,

vielen Dank für Deine Tipps und Hilfen!

DBD::mysqlPP scheint DBI nicht mitzuteilen, wenn die Verbindung zum MySQL Server abgebaut wurde - das ist ein Problem, denn selbst DBD::mysqlPP erkennt nicht die Verbindungstrennung. Zuletzt (nach unendlichen Versuchen die Fehler irgendwie abzufangen - so gegen 23 Uhr...) sah meine mysql_check-Funktion dann so aus:

<CUT>
sub mysql_check(){
  my $mysql_check=0;
  my @mysql_check_dummy=();
  if(defined($mysql)){
    print "defined\n";
    if($mysql->can("prepare")){
      print "can prepare\n";
      if(defined($cmd=$mysql->prepare("SHOW TABLES")){
        print "prepare\n";
        if($cmd->execute()){
          print "execute\n";
          if(@mysql_check_dummy=$cmd->fetchrow_array()){
            print "fetchrow\n";
            $cmd->finish();
            $mysql_check=1;
          }
        }
      }
    }
  }
  return $mysql_check;
}
</CUT>

Mit "print" habe ich mir ausgeben lassen, wo sich das Script gerade befindet - und nach "print "execute\n";" ist es dann passiert. Der Fehler findet innerhalb von DBD::mysqlPP statt: Der Treiber sendet Daten an den Server ohne die Verbindung zu prüfen. Beim Versuch Daten von der nicht existierenden Verbindung zu lesen knallt's dann - ein Problem, dass ich nicht beheben kann, weil ich mysqlPP nicht ändern darf. Naja...

Also ich hab's jetzt so gelöst, dass halt jedes mal vor "sleep" die MySQL-Verbindung getrennt und nach "AUFWACHEN:" wieder aufgebaut wird. Das funktioniert, solange die Verbindung nicht irgendwo unkontrolliert unterbrochen wird - dann habe ich natürlich wieder das selbe Problem. Ich hoffe mal, dass es relativ selten vorkommen wird, dass die Verbindung einfach so weg ist...

Schade eigentlich, dass DBD::mysql auf System-C-Librarys zugreift, sonst würde ich den Treiber nehmen; Der funktioniert nämlich recht gut, scheint jedenfalls weniger Macken zu haben... Aber vielleicht schreibe ich bei Gelegenheit mal meinen eigenen Perl MySQL-Treiber DBD::mysqlPPreloaded ;o)

Ciao
nd