Thread „MySQL: Wie funktioniert UPDATE“ und „INSERT“ mit Perl (20 answers)
Opened by Gast at 2008-01-13 18:07

sid burn
 2010-02-05 18:56
#131899 #131899
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
Es kommt wohl drauf an wieviele Leute am SQL-Server hängen. Da kann es schon mal zu viele Connects geben. Oder täusche ich mich bei den heutigen MySQL-Servern?

Das hängt wohl lediglich von den Einstellungen ab.

Quote
Teilweise gebe ich dir Recht. Es kommt immer drauf an, ob die Meldungen nur zur Analyse verwendet werden, das Programm beenden zu lassen bei Problemen gewünscht ist oder selbst eine verständliche Meldung ausgeben werden soll.

Ist alles kein Grund keine Exceptions zu verwenden. RaiseError ist dafür da das automatisch bei Fehler ausnahmen wirft, anstatt das Fehler durch return codes zurück gegeben wird, die man auswerten muss, und es auch noch vergessen kann.

Möchte man explizit fehler zulassen so arbeitet man mit block "eval {}" oder eben Modulen wie Try::Tiny oder TryCatch um ausnahmen abzufangen. Und auch hier ist es von Vorteil wenn automatisch Exceptions geworfen werden. Da man so auch eine reihe von Befehlen abfangen kann.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
eval {
  $sth->prepare(...);
  $sth->execute(...);
  $sth->prepare(...);
  $sth->execute(...);
  $sth->prepare(...);
  $sth->execute(...);
};
if ( $@ ) {
  warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
  # ... weitere fehlerbehanldung
}


Bei dir hingegen mischt du code mit fehlerbehandlung.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  $sth->prepare(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };
  $sth->execute(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };
  $sth->prepare(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };
  $sth->execute(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };
  $sth->prepare(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };
  $sth->execute(...) or do {
    warn "Shit meine Logische einheit xyz zu machen ist fehlgeschlagen"
    # ... weitere fehlerbehanldung
  };


Das ist unleserlicher, schwer nachzuvollziehen und viel zu viel Tipparbeit. Und du geht wie immer das risiko ein irgendwo eine abfrage mit "or do" etc. zu vergessen.

Ansonsten kannst du Den Fehler genauso auswerten wie ohne Exception. Der Fehler liegt weiterhin in $DBI::errstr oder besser ist man wertet dann $@ ab, wo der dann auch drin landet.

Quote
Kommt eben auf die Benutzeroberfläche an, welche Datenbank abfragt bzw. durch diese mit Daten versorgt wird.

All die Punkte sind komplett unwichtig. Fehler sollten grundsätzlich Exceptions werfen und über einen try{} catch{} Mechanismus abgefangen werden.

So macht es jede neue Programmiersprache und wird es auch Perl 6 machen. Es nicht so zu machen ist einfach Old School C Hackish.

Schau dir halt nochmal PBP an zum Thema Exceptions und Fehlerhandling.

Wenn du übrigens korrekte und vernünftige Exception Objekte wirfst ist das Fehlerhandling sogar leichter. Leider macht davon fast kein Modul von gebrauch. In der Hinsischt ist die Perl Community immer noch ein zurück gebliebenes Kind.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread „MySQL: Wie funktioniert UPDATE“ und „INSERT“ mit Perl