EJECUCIÓN DE SENTENCIAS (no SELECT).

Hay operaciones que se realizan en la base de datos que al no ser consultas (sentencias SELECT) no necesitan atravesar las cuatro etapas que se han visto en el apartado anterior: Preparación-> Ejecución-> Extracción-> Liberación. Por la simpe razón de que no existe la etapa de extracción de datos.

En este tipo de sentencias es un poco engorroso llamar a los métodos prepare, execute y finish, por lo que DBI define el método do para el manejador de la base de datos. Este método devuelve false sólo si hay un error.

Veamos un ejemplo donde se crea un tabla y se inserte una tupla en la misma:


#!/usr/bin/perl

#Usamos las librerias de acceso a BD
use DBI;

my $base_datos="ce"; #Nombre de las base de datos
my $tabla="articulos"; #Nombre de la tabla de ejemplo

#Campos de la tabla de ejemplo
my $campos_tabla=" id INT PRIMARY KEY, nombre VARCHAR(250) NOT NULL, PRECIO_EUROS float";

my $usuario="root"; #Usuario de la BD
my $clave="richal"; #Password de la BD
my $driver="mysql"; #Utilizamos el driver de mysql


#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";


#Creamos la tabla
my $resultado = $dbh->do("create table $tabla ($campos_tabla);") || die "\nError en creacion de tabla $tabla: $DBI::errstr\n";

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

#Insertamos datos en la BD
print "\nInsertamos datos en la BD\n";
$resultado = $dbh->do ("insert into $tabla values (100,'Melocotones',1.2);") || warn "Error en inserción en $tabla: $DBI::errstr\n";
$resultado = $dbh->do ("insert into $tabla values (120,'Tomates',0.9);") || warn "Error en inserción en $tabla: $DBI::errstr\n";
$resultado = $dbh->do ("insert into $tabla values (145,'Pan',0.5);") || warn "Error en inserción en $tabla: $DBI::errstr\n";
$resultado = $dbh->do ("insert into $tabla values (980,'Zumos',0.8);") || warn "Error en inserción en $tabla: $DBI::errstr\n";

#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í.

Una función que proporciona DBI es quote que es especialmente útil cuando se insertan datos usando do. Esta función escapa caracteres especiales en cadenas para se tratadas en la base de datos. Ejemplo:

	my $cadena=" <a href='http://www.richal.com'>Richal O'Donnel Page";
        $sql =$dbh->quote($cadena);
        
2000 Francisco Javier García Castellano. fjgc@decsai.ugr.es