Le informazioni necessarie per connettersi ad un database sono:
data source name: stringa contenente informazioni relative al driver da utilizzare per la connessione e al database cui ci si vuole connettere.
Esempio: “dbi:Oracle:prova”
login e password : nome dell’utente e relativa password (ad esempio “scott”, “tiger”).
Per la connessione si utilizza il metodo connect, al quale sono passati i precedenti valori:
$dbh = DBI->connect(”dbi:Oracle:prova”, “scott”, “tiger”);
che restituisce un handle al database (trattato nel precedente intervento).
Consideriamo un esempio un po’ piu’ complesso:
# caricamento del driver DBI
use DBI;
$dbh = DBI->connect(”dbi:Oracle:prova”, “scott”, “tiger”);
if ( !defined $dbh ) {
die “Connessione al database non riuscita: $DBI::errstrn”;
}
# Disconnessione dal database
$dbh->disconnect;
In questo esempio viene gestita la mancata connessione, in questo caso il metodo restituisce il valore undef, e oltre ad un messaggio standard viene stampato il valore della variabile $DBI::errstr che contiene l’errore che ha causato la mancata connessione.
Al termine delle operazioni non e’ strettamente necessario disconnettersi (ci penserebbe il garbage collector a liberare le risorse) ma e’ comunque un modo piu’ pulito di programmare.
Una volta connessi e’ possibile eseguire le istruzioni sql, per fare cio’ si utilizzano i metodi prepare() che restituisce un handle di tipo statement ed il metodo execute() che esegue l’istruzione sql:
# preparazione dell’istruzione
$sth = $dbh->prepare( “SELECT nome,cognome FROM tabella” );
# esecuzione dell’istruzione
$sth->execute;
Una volta eseguita l’istruzione e’ possibile elaborare i record estratti, tramite il metodo fetchrow(), ad esempio stampandoli a video:
while ( ( $nome, $cognome ) = $sth->fetchrow() ) {
print “NOME: $nometCOGNOME: $cognomen”;
}
# rilascio della risorsa
$sth->finish;
Per quanto riguarda istruzioni che non estraggo i dati, come ad esempio una update, si utilizza il metodo do(), che esegue immediatamente l’istruzione:
$rv = $dbh->do( ” UPDATE tabella SET nome= …. ” );
if ( !defined $rv ) {
die “Istruzione update fallita: $DBI::errstrn”;
}
Per ora e’ tutto, se siete particolarmente interessati all’argomento vi consiglio il libro:

654








