Thread DBD::SQLite - Anzahl Zeilen abfragen
(21 answers)
Opened by Kean at 2011-05-09 09:16
Dein Code sieht reichlich unvollständig aus, und ich kann nicht erkennen, was genau deine Probleme sein sollen. Darum hier ein Beispiel wie man es machen kann. Ist aber ungetestet und soll nur einen Überblick bieten. Man kann es auch anders machen.
myDB.pm :
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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 package myDB; use strict; use warnings; our $dsn="DBI:mysql:database=testdb;host=localhost;port=3306"; sub new { my $class=shift; my $self=bless({},$class); $self->_try(sub{ $self->{DBH}=DBI->connect_cached( $dsn, "root", "", {RaiseError => 1, PrintError => 0} ); }); return $self; } sub fetch_all { my $self=shift; my $sth; my $ok=0; my @data; $ok=$self->_try(sub{ $sth=$self->{DBH}->prepare_cached("SELECT * FROM testtable"); }); return () unless($ok); $ok=$self->_try(sub{ $sth->execute(); }); return () unless($ok); $ok=$self->_try(sub{ while(my @row=$sth->fetchrow()) { push(@data,\@row); } }); @data=() unless($ok); $self->_try(sub{ $sth->finish() }); return @data; } sub error { return shift->{ERROR}; } sub DESTROY { my $self=shift; $self->{DBI}->disconnect(); } sub _try { my $self=shift; my $ref=shift; eval{$ref->()}; if($@) { $self->{ERROR}=$@; return 0; } $self->{ERROR}=''; return 1; } 1; Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 #!/usr/bin/perl use strict; use warnings; use myDB; my $db=myDB->new(); die($db->error()) if($db->error()); my @data=$db->fetch_all(); warn($db->error()) if($db->error()); #... |