Probleme eine mySQL Datenbank mit Perl auf dem Apache anzusprechen.
M. Budde
- webserver
0 Tobias0 M. Budde
0 Peter Squentz0 M. Budde
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
Hi,
Wäre nett, wenn mir jemand von Euch weiterhelfen könnte.
Läuft MySQL im Hintergrund?
Tobias
Läuft MySQL im Hintergrund?
Ja
Gruß
Marcus
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
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>";
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
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
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
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