MySQL Funciones
PHP Manual

mysql_affected_rows

(PHP 4, PHP 5)

mysql_affected_rowsObtiene el número de filas afectadas en la anterior operación de MySQL

Descripción

int mysql_affected_rows ([ resource $link_identifier ] )

Obtiene el número de filas afectadas por la última consulta INSERT, UPDATE, REPLACE o DELETE asociada con link_identifier.

Parámetros

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.

Valores devueltos

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.

Ejemplos

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

Notas

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.

Ver también


MySQL Funciones
PHP Manual