Thread DBI:mysql:... SELECT (9 answers)
Opened by pearl-man at 2005-08-09 10:49

Strat
 2005-08-30 17:54
#33414 #33414
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=nepos,30.08.2005, 09:29]Fuers Fehlerabfangen finde ich die Konstruktion mit eval recht gut.[/quote]
@nepos: Warum denn das?

mit eval kann man ja u.a. Programmabbrueche z.B. durch die() abfangen, und ein Programmabbruch bei DBI kommt normalerweise nur dann vor, wenn du mit RaiseError => 1 arbeitest.

wenn der Erfolg der Abfrage keine Rolle spielt, dann kannst du einfach auf das RaiseError => 1 verzichten, dann sparst du dir das eval drumherum (und auch ein bisschen laufzeit).

wenn der Erfolg der Abfrage hingegen eine Rolle spielt, dann musst du sowieso Fehler abfragen (oder besser sogar: abfangen). Und ohne RaiseError => 1 tauscht du eval + fehlerabfrage in nichts + fehlerabfrage um, also sparst dir das eval und kannst zusaetzlich kontrollierter auf den Fehler reagieren, weil du bestimmen kannst, wie die Fehlermeldung(en) ausgegeben werden, eventuell sogar alternativwege gehen kannst und nicht qualvoll $@ durchparsen musst.

Und wenn es in beiden Faellen Sinn macht, auf RaiseError => 1 und eval zu verzichten, warum es dann nicht einfach tun?

Code: (dl )
1
2
3
4
5
6
eval {
 $sth->execute($var1, $var2);
};
if ($@) {
 die "Error: $@\n";
}

Code: (dl )
1
2
3
unless ($sth->execute($var1, $var2)) {
 die "Error in executing sql: ", $dbh->errstr, "\n\tStatement was: $sql\n";
} # unless


oder siehst du das anders?\n\n

<!--EDIT|Strat|1125410174-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread DBI:mysql:... SELECT