my_ulonglong mysql_affected_rows(MYSQL
*mysql)
Description
mysql_affected_rows()
may be
called immediately after executing a statement with
mysql_query()
or
mysql_real_query()
. It returns
the number of rows changed, deleted, or inserted by the last
statement if it was an UPDATE
,
DELETE
, or
INSERT
. For
SELECT
statements,
mysql_affected_rows()
works like
mysql_num_rows()
.
For UPDATE
statements, the
affected-rows value by default is the number of rows actually
changed. If you specify the CLIENT_FOUND_ROWS
flag to mysql_real_connect()
when connecting to mysqld, the affected-rows
value is the number of rows “found”; that is,
matched by the WHERE
clause.
For REPLACE
statements, the
affected-rows value is 2 if the new row replaced an old row,
because in this case, one row was inserted after the duplicate
was deleted.
For INSERT
... ON DUPLICATE KEY UPDATE
statements, the
affected-rows value is 1 if the row is inserted as a new row and
2 if an existing row is updated.
Following a CALL
statement for a
stored procedure,
mysql_affected_rows()
returns
the value that it would return for the last statement executed
within the procedure, or 0
if that statement
would return -1
. Within the procedure, you
can use ROW_COUNT()
at the SQL
level to obtain the affected-rows value for individual
statements.
As of MySQL 5.5.5,
mysql_affected_rows()
returns a
meaningful value for a wider range of statements. For details,
see the description for
ROW_COUNT()
in
Section 11.14, “Information Functions”.
Return Values
An integer greater than zero indicates the number of rows
affected or retrieved. Zero indicates that no records were
updated for an UPDATE
statement,
no rows matched the WHERE
clause in the query
or that no query has yet been executed. -1 indicates that the
query returned an error or that, for a
SELECT
query,
mysql_affected_rows()
was called
prior to calling
mysql_store_result()
.
Because mysql_affected_rows()
returns an unsigned value, you can check for -1 by comparing the
return value to (my_ulonglong)-1
(or to
(my_ulonglong)~0
, which is equivalent).
Errors
None.
Example
char *stmt = "UPDATE products SET cost=cost*1.25 WHERE group=10"; mysql_query(&mysql,stmt); printf("%ld products updated", (long) mysql_affected_rows(&mysql));