M. Budde: Probleme eine mySQL Datenbank mit Perl auf dem Apache anzusprechen.

Hallo zusammen!

Ich habe auf meinem Rechner (Win98) eine lokale Testumgebung eingerichtet und sowohl einen Apache Server und einen mySQL DB-Server installiert. Nun habe ich ein cgi-script in Perl geschrieben, welches die mySQL-DB anspricht. Auch die funktioniert, wenn ich es über die DOS-Shell ausführe.

Wenn ich aber nun dieses Perl-Script über den Browser aufrufe, wird es nur bis zu der Stelle ausgeführt (oder zumindest wird an dieser Stelle die Datenübertragung an den Browser abgebrochen) an der die connect Anweisung zur Datenbank aufgerufen wird. Es kommt dabei zu keiner Fehlermeldung und das Apache error_log gibt leider auch nichts her.

Wäre nett, wenn mir jemand von Euch weiterhelfen könnte.

Gruß
           Marcus

  1. Hi,

    Wäre nett, wenn mir jemand von Euch weiterhelfen könnte.

    Läuft MySQL im Hintergrund?

    Tobias

    1. Läuft MySQL im Hintergrund?

      Ja

      Gruß
                Marcus

  2. Wenn ich aber nun dieses Perl-Script über den Browser aufrufe, wird es nur bis zu der Stelle ausgeführt (oder zumindest wird an dieser Stelle die Datenübertragung an den Browser abgebrochen) an der die connect Anweisung zur Datenbank aufgerufen wird. Es kommt dabei zu keiner Fehlermeldung und das Apache error_log gibt leider auch nichts her.

    Poste den entsprechenden Code, sonst ist dir nicht zu helfen.

    Peter

    1. Poste den entsprechenden Code, sonst ist dir nicht zu helfen.

      Wie gesagt, in der DOS-Shell funktioniert das Script. Aber möglich ist alles...

      Gruß
               Marcus

      #!/usr/bin/perl
      use DBI;
      use strict;

      print "Content-type: text/html\n\n";
      print "<HTML><HEAD></HEAD><BODY>\n";
      print "Test: ";

      my($db_typ, $db_name, $hostname, $port, $dbh, $sth, $rc, $i, $ref);

      $db_typ = 'mysql';
      $db_name = 'webdata';
      chomp ($hostname = '127.0.0.1');
      $port = 3306;
      $dbh = DBI->connect("DBI:$db_typ:$db_name:$hostname:$port", "root", "passwort");
      print "Fehler: $DBI::errstr";
      if ($DBI::errstr ne "") {die}
      $sth = $dbh->prepare(<<SLCT);
      SELECT * FROM mitarbeiter
      SLCT
      $sth->execute;

      my $namen = $sth->{'NAME'};
      my $anzFelder = $sth->{'NUM_OF_FIELDS'};

      for ($i = 0; $i < $anzFelder; $i++)
      {
      printf("%s%s", $$namen[$i], $i ? "," : "");
      }
      print "\n";
      while ($ref = $sth->fetchrow_arrayref)
      {
      for ($i = 0; $i < $anzFelder; $i++)
      {
        printf("%s%s", $$ref[$i], $i ? "," : "");
      }
      print "\n";
      }

      $sth->finish;
      $rc = $dbh->disconnect;

      print "</BODY></HTML>";

      1. Die Fehlerbehandlung ist ziemlich unguenstig. So kann nichts im Error-Log landen.

        $dbh = DBI->connect("DBI:$db_typ:$db_name:$hostname:$port", "root", "passwort");

        my $dbh = DBI->connect ... or die "can't connect: $DBI::errstr";

        print "Fehler: $DBI::errstr";
        if ($DBI::errstr ne "") {die}

        Das taugt dagegen nichts.

        $sth = $dbh->prepare(<<SLCT);

        my $sth = $dbh->prepare(<<SLCT) or die "can't prepare!";

        SELECT * FROM mitarbeiter
        SLCT
        $sth->execute;

        $sth->execute or die "can't execute: ". $sth->errstr;

        Peter

        1. Die Fehlerbehandlung ist ziemlich unguenstig. So kann nichts im Error-Log landen...

          Ich habe Deine Änderungen vorgenommen, aber das error_log bleibt leer.

          Könnte es sein, daß ich in der httpd.config des Apache noch etwas eintragen muß?

          Gruß
                   Marcus

          1. Könnte es sein, daß ich in der httpd.config des Apache noch etwas eintragen muß?

            Das ist aus der Ferne schwer zu sagen. Mit

            use CGI::Carp 'fatalsToBrowser';

            kannst Du dir die Fehlermeldungen im Browser anzeigen lassen. Vielleicht hilft dir das.

            Ansonsten fueg mal in die an eine Stelle ein, an der es auf jeden Fall ausgefuehrt wird und kontrollier, ob Du einen entsprechenden Eintrag im Error-Log findest.

            Peter

            1. Könnte es sein, daß ich in der httpd.config des Apache noch etwas eintragen muß?

              Das ist aus der Ferne schwer zu sagen. Mit

              use CGI::Carp 'fatalsToBrowser';

              kannst Du dir die Fehlermeldungen im Browser anzeigen lassen. Vielleicht hilft dir das.

              Hat es.

              Herzlichen Dank
                                        Marcus