CONSULTAS EN LA BD

Las tareas más comunes entre un script en Perl y la BD es obtener datos de la misma. En SQL, este proceso se realiza con una sentencia SELECT.

El proceso de obtener datos usando DBI se divide en cuatro etapas:

  1. Preparación: En esta etapa se analiza y valida la sentencia SQL y se devuelve un manejador de sentencia representando la sentencia en la base de datos. Se utiliza el método prepare (con la consulta SQL como parámetro) del manejador de la base de datos, devolviendo el manejador de la sentencia.
  2. Ejecución: En esta etapa se ejecuta el manejador de sentencia obtenido en la etapa anterior. En esta etapa se hace la consulta y se almacenan los datos en las estructuras de datos correspondientes de la BD, aunque en esta etapa, el script en Perl no puede acceder a los datos obtenidos. Se utiliza el método execute del manejador de sentencia.
  3. Extracción: En esta etapa se captan los datos de la base de datos usando el manejador de sentencia. En dicha captación de datos se va almacenando los datos consultados, tupla a tupla en las estructuras de datos de Perl, para que sean posteriormente manipulados por el script.
  4. Liberación: En esta fase se liberan los recursos ocupados por el manejador de sentencia y por la base de datos. Se utiliza el método finish del manejador de sentencia.

Veamos un ejemplo en la base de datos del ejemplo anterior donde se realiza una consulta para obtener información de la base de datos:


#!/usr/bin/perl


#Usamos las librerias de acceso a BD
use DBI;

my $base_datos="ce"; #Nombre de las base de datos
my $usuario="root"; #Usuario de la BD
my $clave="richal"; #Password de la BD
my $driver="mysql"; #Utilizamos el driver de mysql
my $tabla="articulos"; #Nombre de la tabla de ejemplo


#Conectamos con la BD, si no podemos, ponemos un mensaje de error
my $dbh = DBI->connect("dbi:$driver:$base_datos",$usuario,$clave) || die "\nError al abrir la base datos: $DBI::errstr\n";


#Decimos que hemos conectado
print "\nSe ha conectado con la BD $base_datos del driver $driver\n";


 #Realizamos la etapa de preparación de la sentencia
 my $sth = $dbh->prepare("SELECT id,nombre FROM articulos;");

 #Realizamos la etapa de ejecución de la sentencia
 $sth->execute();

 #Realizamos la etapa de extracción de datos. Imprimimos tupla a tupla.
 while ( @tupla=$sth->fetchrow_array())
 {
        print "C›digo:$tupla[0]    Nombre: $tupla[1]\n";
 }

 #Realizamos la etapa de liberación de recursos ocupados por la sentencia
 $sth->finish();




#Nos desconectamos de la BD. Mostramos un mensaje si hay
#algun fallo
$dbh->disconnect || warn "\nFallo al desconectar.\nError: $DBI::errstr\n";

#Terminamos
exit;


El ejemplo anterior está aquí.


Para la extracción de datos provenientes de la consulta, DBI nos proporciona una serie de métodos del manejador de la sentencia:

2000 Francisco Javier García Castellano. fjgc@decsai.ugr.es