Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Como saber si un update se realizó o no ?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Mensaje Mie Jul 12, 2006 11:33 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Como saber si un update se realizó o no ? Responder citando

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
Mensaje Mie Jul 12, 2006 11:57 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

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:
Cita:
> 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:
Cita:
> 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...
Mensaje Mie Jul 12, 2006 5:38 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Responder citando

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

Eres un genio explorer !!!
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group