Hallo Aqua,
1) Ist es $dbh->errstr; oder $sth->errstr; ?
In der perldoc DBI bzw. der Modulbeschreibung von DBI.pm
fand ich beides, sowohl
$sth->errstr; als auch $dbh->errstr;
Du hast zwei Objekte mit gleichnamigen Methoden, das mag dich verwirren. $dbh ist dein Datenbankhandle, während $sth der Statementhandler ist. Beide haben die Methode errstr. Beginnen wirst du immer, indem du versuchst, mit folgender Anweisung eine Verbindung zur Datenbank herzustellen:
$dbh = DBI->connect($data_source, $username, $auth, %attr) || die $DBI::erstr;
Du siehst, geht bei der Erzeugung des neuen DB-Handles etwas schief, wird der entsprechende Fehler abgefangen und ausgegeben.
Nehmen wir an, alles ist gut gegangen. Nun willst du eine DB-Abfrage realisieren, wozu du natürlich erst mal das entsprechende Statementhandle-Objekt erzeugen musst:
$sth = $dbh->prepare($statement) || die $dbh->errstr;
Geht hier etwas schief, liefert dir die Methode errstr des Datenbankhandles $dbh die entsprechende Fehlermeldung. $sth->errstr liefert dir hier noch nichts, denn beim Erzeugen des Objektes $sth ist irgendwas schief gegangen, weshalb dir dieses Objekt mit seinen Methoden nicht zur Verfügung steht.
Im Erfolgsfall kannst du mit dem Objekt $sth und seinen Methoden (u.a. errstr) weitermachen, z.B. das Statement ausführen:
$rv = $sth->execute || die $sth->errstr; # Siehe Doku ;-)
Du siehst, jetzt hilft dir $dbh->errstr nicht weiter, denn da war ja die Perlwelt noch in Ordnung. Du willst aber wissen, welchen Fehler du beim Aufruf der Methode execute des Objektes $sth erhältst, musst also logischerweise $sth->errstr benutzen.
Es ist mir unklar welches ich wann wie warum brauche....
Faustformel:
Aufruf einer Datenbankhandle-Methode: $dbh->errstr
Aufruf einer Statementhandle-Methode: $sth->errstr
Hoffe es hilft
Torsten
PS: http://www.thomas-fahle.de/pub/perl/DBI/DBI.html
Feed your ears: http://www.siechfreds-welt.de/sixfeetunder.shtml