Perl fa tante cose belle… fra le altre ha un bellissimo modulo che gestisce l’interazione coi database: questo modulo si chiama DBI.
In un programma tipico vediamo la chiamata al modulo, l’impostazione del database handler ($dbh) e dello statement handler ($sth), la query ($sql), poi la preparazione e l’esecuzione della query.
#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("dbi:mysql:dbname","user","passwd")
or die("Couldn't connect to db: ".$DBI::errstr);
my $sql = "SELECT id,name,surname FROM table";
my $sth = $dbh->prepare($sql)
or die("Couldn't prepare statement: ".$dbh->errstr);
$sth->execute();
La cosa molto interessante, a mio avviso, è che Perl offre moltissimi modi per fetchare i dati dall’oggetto scaricato dal db.
1) fetchrow_array, questo metodo copia i dati dal db all’array @row e poi li manipola intervenendo sull’array.
while ( my @row = $sth->fetchrow_array() )
{
print("$row[0]\t$row[1]\t$row[2]\n");
}
2) fetchrow_arrayref, questo metodo crea un riferimento numerico al record nel db.
while ( my $row = $sth->fetchrow_hashref() )
{
print("$row->[0]\t$row->[1]\t$row->[2]\n");
}
3) fetchrow_hashref, questo metodo crea un riferimento associativo al record nel db.
while ( my $row = $sth->fetchrow_hashref() )
{
print("$row->{id}\t$row->{name}\t$row->{surname}\n");
}
4) fetchall_arrayref, questo metodo è molto interessante perche’ permette di manipolare tutti i record attraverso le reference di un array di reference. (I dati si possono mischiare, scambiando i riferimenti dell’array di riferimento.)
my $row = $sth->fetchall_arrayref();
# stampano i 3 dati del primo [0] e del secondo [1] record
print("$row->[0]->[0]\t$row->[0]->[1]\t$row->[0]->[2]\n");
print("$row->[1]->[0]\t$row->[1]->[1]\t$row->[1]->[2]\n");
# stampa il primo dato del primo record, il secondo dato del secondo
# record, ed il terzo dato del terzo record.
print("$row->[0]->[0]\t$row->[1]->[1]\t$row->[2]->[2]\n");
5) bind_columns / fetch
my( $id, $name, $surname );
$sth->bind_columns( \$id, \$name, \$surname );
while ($sth->fetch())
{
print("$id\t$name $surname\n");
}
Info sparse online:
- CPAN: DBI.pm
- DBI bind columns
- Perl DBI Example
- Idiomi del DBI di Giuseppe Maxia [pdf]
- Perlmeme: connecto to db
1 Comment to “Modulo DBI”
Write a comment
You need tologin.
[...] Modulo DBI (2) Apr24 24 April 2009, Simotrone @ 7:04 pm Tempo addietro ho parlato del bellissimo DBI di perl, ma non ho parlato dei placeholder. Dunque ho rispolverato [...]