Otras sentencias

Para otros comandos SQL, como INSERT, UPDATE, DROP o CREATE, podemos seguir usando la combinación prepare() + execute() , podemos hacerlo también en un sólo paso, con el método do() . Podéis usarlo para sentencias como:

DELETE FROM blast WHERE hit = 'ECOLI_CRP';

UPDATE tabla SET var1 = var1+1 WHERE id = 247;

INSERT INTO variables VALUES ('grafo', 0);

Éste es un ejemplo de uso de do() :

use strict;
use DBI;

my $conexion = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave",{PrintError,0,RaiseError,1});

# filas contiene el numero de filas afectadas por la sentencia,
# en caso de error devuelve falso
my $filas = $conexion->do("DELETE FROM blast");
if(!$filas)
{
	print "no pude ejecutar la expresion SQL\n";
}

$conexion->disconnect();

Para las bases de datos basadas en transacciones estas sentencias sólo tendrán efecto si tras cursarlas se ejecuta el comando COMMIT, que por defecto DBI ejecuta automáticamente por nosotros. Pero también podemos hacerlo explícitamente:

use strict;
use DBI;

my $conexion = DBI->connect("dbi:mysql:test:servidor.ccg.unam.mx","usuario","clave",{PrintError,0,RaiseError,1,AutoCommit,0});

# filas contiene el numero de filas afectadas por la sentencia,
# en caso de error devuelve falso
my $filas = $conexion->do("INSERT INTO variables VALUES ('grafo', 0)");
if(!$filas)
{
	print "no pude ejecutar la expresion SQL\n";
}
else
{
	# si quieres fijar estos cambios:
	$conexion->commit(); 
	
	# si quisieras descartalos:
	$conexion->rollback();
}

$dbh->rollback();

$conexion->disconnect();

Bruno Contreras-Moreira
http://www.eead.csic.es/compbio