(PHP 4, PHP 5)
mysql_affected_rows — Obtiene el número de filas afectadas en la anterior operación de MySQL
Obtiene el número de filas afectadas por la última consulta INSERT, UPDATE, REPLACE o DELETE asociada con 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 fallo.
Si la consulta anterior fue DELETE con ninguna clausula WHERE, todos los registros han sido borrados de la tabla pero ésta función devolverá cero con una versión anterior a MySQL 4.1.2.
Al utilizar UPDATE, MySQL no va a actualizar las columnas donde el nuevo valor es el mismo que el anterior. Esto crea la posibilidad que mysql_affected_rows() no pueda equivaler en realidad al número de filas encontradas, solamente el número de filas que estuvo literalmente afectada por la consulta.
La declaración 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 mas el número de registros insertados.
Example #1 Ejemplo de mysql_affected_rows()
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('No pudo conectar: ' . mysql_error());
}
mysql_select_db('mydb');
/* Debería devolver el número correcto de registros borrados */
mysql_query('DELETE FROM mytable 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 mytable 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
Example #2 Ejemplo de mysql_affected_rows() al utilizar transacciones
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('No pudo conectar: ' . mysql_error());
}
mysql_select_db('mydb');
/* Actualizar registros */
mysql_query("UPDATE mytable SET used=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
Note: Transacciones
Si se usa transacciones, es necesario llamar mysql_affected_rows() después de la consulta INSERT, UPDATE, o DELETE, no después del COMMIT.
Note: Declaraciones SELECT
Para conocer el número de filas devueltas por un SELECT, se puede usar usar mysql_num_rows().
Note: Cascada de Claves Foráneas
mysql_affected_rows() no cuenta la filas afectadas implícitamente aunque a través del uso de ON DELETE CASCADE and/or ON UPDATE CASCADE en las restricciones de las claves foráneas.