Copyright 1997-2022 the PHP Documentation Group.
mysql_affected_rows
Get number of affected rows in previous MySQL operation
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide. Alternatives to this function include:
mysqli_affected_rows
|
PDOStatement::rowCount
|
Description
int mysql_affected_rows(resource link_identifier= =NULL);
Get the number of affected rows by the last INSERT, UPDATE,
REPLACE or DELETE query associated with
link_identifier
.
Parameters
-
link_identifier
The MySQL connection. If the link identifier is not specified, the last link opened by
mysql_connect
is assumed. If no such link is found, it will try to create one as ifmysql_connect
had been called with no arguments. If no connection is found or established, anE_WARNING
level error is generated.
Return Values
Returns the number of affected rows on success, and -1 if the last query failed.
If the last query was a DELETE query with no WHERE clause, all of the records will have been deleted from the table but this function will return zero with MySQL versions prior to 4.1.2.
When using UPDATE, MySQL will not update columns where the new
value is the same as the old value. This creates the possibility
that
mysql_affected_rows
may not actually equal the number of rows matched, only the
number of rows that were literally affected by the query.
The REPLACE statement first deletes the record with the same primary key and then inserts the new record. This function returns the number of deleted records plus the number of inserted records.
In the case of "INSERT ... ON DUPLICATE KEY UPDATE"
queries, the return value will be 1
if an
insert was performed, or 2
for an update of
an existing row.
Examples
Example 7.143 mysql_affected_rows
example
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
/* this should return the correct numbers of deleted records */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Records deleted: %d\n", mysql_affected_rows());
/* with a where clause that is never true, it should return 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Records deleted: %d\n", mysql_affected_rows());
?>
The above example will output something similar to:
Records deleted: 10 Records deleted: 0
Example 7.144 mysql_affected_rows
example using transactions
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
/* Update records */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("Updated records: %d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
The above example will output something similar to:
Updated Records: 10
Notes
If you are using transactions, you need to call
mysql_affected_rows
after your INSERT, UPDATE, or DELETE query, not after the
COMMIT.
To retrieve the number of rows returned by a SELECT, it is
possible to use
mysql_num_rows
.
mysql_affected_rows
does not count rows affected implicitly through the use of ON
DELETE CASCADE and/or ON UPDATE CASCADE in foreign key
constraints.
See Also
mysql_num_rows
|
mysql_info
|