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