• Publicidad

Como saber si un update se realizó o no ?

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Como saber si un update se realizó o no ?

Notapor monoswim » 2006-07-12 12:33 @564

tengo un update que lo ejecuto desde execute()

pero el update tiene una condición, hay forma de saber si se dió esa condición o no ? o sea, si efectivamente se actualizó o no ?

Busqué en la doc del DBI pero no encuentro nada...

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Publicidad

Notapor explorer » 2006-07-12 12:57 @581

Queda claro que sabes que puedes hacer un 'or die' al execute para saber si ha conseguido hacer bien la orden, pero de lo que no estás seguro es de si se ha cumplido la condición que has puesto dentro de la orden sql...

Que yo sepa, DBI no puede saber eso, pero sí puede saber el número de filas de la base de datos que han sido afectadas.

Un ejemplo. Supongamos que tengo una base de datos que se llama guia, con una tabla que se llama valladolid, con registros de nombres de empresas. Necesito actualizar el número de cliente de una de esas empresas. Puedo hacer la siguiente operación:
> UPDATE valladolid SET referencia='1234' WHERE nombre = 'APROSI' AND epigrafe = 'INTERNET';
Query OK, 1 row affected (0.02 sec)
Líneas correspondientes: 1 Cambiadas: 1 Avisos: 0
Todo va bien y la base de datos me dice que una ha sido la línea afectada.

Pero si me equivoco en la condición final, el resultado es distinto:
> UPDATE valladolid SET referencia='1234' WHERE nombre = 'APROSI' AND epigrafe = 'INTERNET1';
Query OK, 0 rows affected (0.00 sec)
Líneas correspondientes: 0 Cambiadas: 0 Avisos: 0
Fíjate: me dice que la Query ha ido bien (OK), pero el número de líneas afectadas ha sido de 0 (no ha encontrado ninguna correspondencia con la condición de búsqueda). Para DBI, no habría error.

La pista está entonces es saber si ha habido líneas afectadas.

Mira en la documentación de DBI, en la parte que habla de la función do(). Lo que interesa es esto: $sth->rows. Pruebas y nos dices...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor monoswim » 2006-07-12 18:38 @818

$rows_affected = $dbh->do("UPDATE your_table SET foo = foo + 1");

Eres un genio explorer !!!
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados