(PHP 4, PHP 5)
mysql_affected_rows — Obtiene el número de filas afectadas en la anterior operación de MySQL
Esta extensión está obsoleta a partir de PHP 5.5.0, y será eliminada en el futuro. En su lugar, deberían usarse las extensiones MySQLi o PDO_MySQL. Véase también la guía MySQL: elegir una API y P+F relacionadas para más información. Las alternativas a esta función incluyen:
$link_identifier
= NULL
] )
Obtiene el número de filas afectadas por la última consulta INSERT, UPDATE, REPLACE
o DELETE asociada con link_identifier
.
link_identifier
La conexión MySQL. Si el
identificador de enlace no se especifica, el último enlace abierto por
mysql_connect() es asumido. Si no se encuentra dicho enlace, la
función intentará establecer un nuevo enlace como si mysql_connect() fuese invocado
sin parámetros. Si no se encuentra o establece una conexión, un error de nivel
E_WARNING
es generado.
Devuelve el número de filas afectadas en caso de éxito, y -1 si la última consulta falló.
Si la consulta anterior fue DELETE con ninguna cláusula WHERE, todos los registros habrán sido borrados de la tabla, aunque ésta función devolverá cero con una versión anterior a MySQL 4.1.2.
Al utilizar UPDATE, MySQL no actualiza las columnas donde el nuevo valor es el mismo que el anterior. Esto crea la posibilidad de que mysql_affected_rows() no pueda equivaler en realidad al número de filas encontradas, solamente el número de filas que estuvieron literalmente afectadas por la consulta.
La sentencia REPLACE primero borra el registro con la misma clave primaria y luego inserta el nuevo registro. Esta función devuelve el número de registros borrados más el número de registros insertados.
En el caso de consultas "INSERT ... ON DUPLICATE KEY UPDATE", el valor devuelto será 1 si se realizó una inserción, o 2 para una actualización de una fila existente.
Ejemplo #1 Ejemplo de mysql_affected_rows()
<?php
$enlace = mysql_connect('localhost', 'usuario_mysql', 'contraseña_mysql');
if (!$enlace) {
die('No se pudo conectar: ' . mysql_error());
}
mysql_select_db('mibd');
/* Esto debería devolver el número correcto de registros borrados */
mysql_query('DELETE FROM mitabla WHERE id < 10');
printf("Registros borrados: %d\n", mysql_affected_rows());
/* con una clausula WHERE que nunca es verdad, debería devolver 0 */
mysql_query('DELETE FROM mitabla WHERE 0');
printf("Registros borrados: %d\n", mysql_affected_rows());
?>
El resultado del ejemplo sería algo similar a:
Registros borrados: 10 Registros borrados: 0
Ejemplo #2 Ejemplo de mysql_affected_rows() al utilizar transacciones
<?php
$enlace = mysql_connect('localhost', 'usuario_mysql', 'contraseña_mysql');
if (!$enlace) {
die('No se pudo conectar: ' . mysql_error());
}
mysql_select_db('mibd');
/* Actualizar registros */
mysql_query("UPDATE mitabla SET usado=1 WHERE id < 10");
printf ("Registros actualizados: %d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
El resultado del ejemplo sería algo similar a:
Registros actualizados: 10
Nota: Transacciones
Si se usan transacciones, es necesario llamar a mysql_affected_rows() después de una consulta INSERT, UPDATE, o DELETE, no después del COMMIT.
Nota: Sentencias SELECT
Para conocer el número de filas devueltas por un SELECT, es posible usar mysql_num_rows().
Nota: Claves Foráneas en Cascada
mysql_affected_rows() no cuenta la filas afectadas implícitamente a través del uso de ON DELETE CASCADE y/o ON UPDATE CASCADE en las restricciones de las claves foráneas.