OPTIONAL
SYNOPSIS
        int db_affected_rows(int handle)

DESCRIPTION
        Return the number of affected rows of the last SQL-statement that
        has been sent to the SQL-server via handle <handle>.
        Only useful for DELETE- or UPDATE-operations.

        The function is available only if the driver is compiled with
        mySQL support. In that case, __MYSQL__ is defined.

        The efun triggers a privilege violation ("mysql", "db_affected_rows").

HISTORY
        Added in 3.2.9 .
        LDMud 3.2.11 added the privilege violation.

SEE ALSO
        db_conv_string(E), db_close(E), db_coldefs(E), db_connect(E),
        db_exec(E), db_error(E), db_fetch(E), db_insert_id(E), db_handles(E),
        mysql(C), privilege_violation(M)
