MySQL and PHP
Copyright 1997-2021 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 and related FAQ for more information. Alternatives to this function include:
mysqli_affected_rows
|
PDOStatement::rowCount
|
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
.
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 if
mysql_connect
had been called with no arguments. If no connection is
found or established, an E_WARNING
level error is generated.
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.
Example 6.2 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 6.3 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
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.
mysql_num_rows
|
mysql_info
|