Thread DBD::SQLite - Anzahl Zeilen abfragen (21 answers)
Opened by Kean at 2011-05-09 09:16

topeg
 2011-05-11 09:50
#148448 #148448
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.
more (13.0kb):
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());

#...

View full thread DBD::SQLite - Anzahl Zeilen abfragen