(PHP 4, PHP 5)
mysql_affected_rows — Obtiene el número de filas afectadas en la anterior operación de MySQL
Esta extensión fue declarada obsoleta en PHP 5.5.0 y eliminada en PHP 7.0.0. En su lugar debería utilzarse las extensiones MySQLi o PDO_MySQL. Véase también la guía MySQL: elegir una API y sus P+F relacionadas para más información. Alternatives to this function include:
$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 no
se especifica el identificador de enlace, se asume el último enlace abierto
por mysql_connect(). Si no se encuentra este enlace, se
intentará crear un nuevo enlace como si mysql_connect() hubiese sido invocada
sin argumentos. Si no se encuentra o establece ninguna conexión, se genera un error
de nivel E_WARNING
.
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.