Mie Jul 12, 2006 11:33 am
|
 |
monoswim
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 ? |
|
|
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 |
|
|
|

Mie Jul 12, 2006 11:57 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|

Mie Jul 12, 2006 5:38 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
|
|
|
|
|
$rows_affected = $dbh->do("UPDATE your_table SET foo = foo + 1");
Eres un genio explorer !!! |
|
Powered by phpBB © 2001, 2005 phpBB Group
|