Thread DBI: Exception Model RaiseError
(15 answers)
Opened by rosti at 2011-03-23 10:21
Moin,
meine Lösung sieht nun so aus, dass die DB-Klasse eine Tie-Method hat: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 sub TIEARRAY{ my $class = shift; my $ref = shift; my $self = $class->new; return if $@; if(exists $ref->{url}){ my $q = q(SELECT ref, FROM_UNIXTIME(ts), hugo FROM log WHERE url=? ORDER BY ts DESC LIMIT 10); my $st = $self->{DBH}->prepare_cached($q); eval{ $st->execute($ref->{url}); $self->{STH} = $st; # Statement Handle an Objekt $self->{CB} = $ref->{callback}; # Callbackfunktion an Objekt }; return if $@; } return $self; } In der Einbindung wird zunächst das Array gebunden: Code (perl): (dl
)
1 2 3 tie (my @ura, 'TieLog', { url => '/praxis', callback => \&cb_array}) || die "Fehler: $@"; print "============= Daten kommen ==============\n\n"; tied(@ura)->callback; D.h., beim tie() wird festgestellt, ob es einen Fehler gab. Danach kann die Ausgabe erfolgen. Wenn dabei 'unterwegs' noch was schiefgeht, isses halt Pech ;) Edit: Callback-Method in der DB-Klasse Code (perl): (dl
)
1 2 3 4 5 6 7 # CallBack sub callback{ my $self = shift; while(my $ref = $self->{STH}->fetchrow_arrayref){ $self->{CB}($ref); } } Diese Methode kann immer dann verwendet werden, wenn die Ausgabe über eine Array-Referenz je Record erfolgen soll (Code mehrfach verwendbar). Last edited: 2011-05-07 08:46:33 +0200 (CEST) |