TorstenA: Modul DBI - $sth->errstr; oder $dbh->errstr;

Beitrag lesen

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