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:



1 Comment to “Modulo DBI”


  1. SIMOTRONE WEB PAGE » Blog Archive » Modulo DBI (2) — 24 April 2009 @ 7:06 pm

    [...] 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 [...]



Write a comment


You need tologin.

    
SIMOTRONE WEB PAGE is based on WordPress platform, RSS tech , RSS comments design by Gx3.