<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.23 $ -->
<refentry xml:id="function.mysql-affected-rows" xmlns="http://docbook.org/ns/docbook">
 <refnamediv>
  <refname>mysql_affected_rows</refname>
  <refpurpose>Get number of affected rows in previous MySQL operation</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>int</type><methodname>mysql_affected_rows</methodname>
   <methodparam choice="opt"><type>resource</type><parameter>link_identifier</parameter></methodparam>
  </methodsynopsis>
  <para>
   Get the number of affected rows by the last INSERT, UPDATE, REPLACE 
   or DELETE query associated with <parameter>link_identifier</parameter>.  
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    &mysql.linkid.description;
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Returns the number of affected rows on success, and -1 if the last query
   failed.
  </para>
  <para>
   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.
  </para>
  <para>
   When using UPDATE, MySQL will not update columns where the new value is the 
   same as the old value.  This creates the possibility that 
   <function>mysql_affected_rows</function> may not actually equal the number 
   of rows matched, only the number of rows that were literally affected by 
   the query.
  </para>
  <para>
   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.
  </para> 
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>mysql_affected_rows</function> example</title>
    <programlisting role="php">
<![CDATA[
<?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());
?>
]]>
    </programlisting>
    &example.outputs.similar;
    <screen>
<![CDATA[
Records deleted: 10
Records deleted: 0
]]>
    </screen>
   </example>
  </para>
  <para>
   <example>
    <title><function>mysql_affected_rows</function> example using transactions</title>
    <programlisting role="php">
<![CDATA[
<?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");
?>
]]>
    </programlisting>
    &example.outputs.similar;
    <screen>
<![CDATA[
Updated Records: 10
]]>
    </screen>
   </example>
  </para>
 </refsect1>

 <refsect1 role="notes">
  &reftitle.notes;
  <note>
   <title>Transactions</title>
   <para>
    If you are using transactions, you need to call
    <function>mysql_affected_rows</function> after your INSERT, UPDATE, or 
    DELETE query, not after the COMMIT.
   </para>
  </note>
  <note>
   <title>SELECT Statements</title>
   <para>
    To retrieve the number of rows returned by a SELECT, it is possible to
    use <function>mysql_num_rows</function>.
   </para>
  </note>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>mysql_num_rows</function></member>
    <member><function>mysql_info</function></member>
   </simplelist>
  </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->