<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Get number of affected rows in previous MySQL operation</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="ref.mysql.html">MySQL Functions</a></div> <div class="next" style="text-align: right; float: right;"><a href="function.mysql-client-encoding.html">mysql_client_encoding</a></div> <div class="up"><a href="ref.mysql.html">MySQL Functions</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="function.mysql-affected-rows" class="refentry"> <div class="refnamediv"> <h1 class="refname">mysql_affected_rows</h1> <p class="verinfo">(PHP 4, PHP 5)</p><p class="refpurpose"><span class="refname">mysql_affected_rows</span> — <span class="dc-title">Get number of affected rows in previous MySQL operation</span></p> </div> <div id="function.mysql-affected-rows-refsynopsisdiv"> <div class="warning"><strong class="warning">Warning</strong> <p class="para">This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the <a href="book.mysqli.html" class="link">MySQLi</a> or <a href="ref.pdo-mysql.html" class="link">PDO_MySQL</a> extension should be used. See also <a href="mysqlinfo.api.choosing.html" class="link">MySQL: choosing an API</a> guide and <a href="faq.databases.html#faq.databases.mysql.deprecated" class="link">related FAQ</a> for more information. Alternatives to this function include:</p> <ul class="simplelist"> <li class="member"> <span class="function"><a href="mysqli.affected-rows.html" class="function">mysqli_affected_rows()</a></span></li> <li class="member"> <span class="methodname"><a href="pdostatement.rowcount.html" class="methodname">PDOStatement::rowCount()</a></span></li> </ul> </div> </div> <div class="refsect1 description" id="refsect1-function.mysql-affected-rows-description"> <h3 class="title">Description</h3> <div class="methodsynopsis dc-description"> <span class="type">int</span> <span class="methodname"><strong>mysql_affected_rows</strong></span> ([ <span class="methodparam"><span class="type">resource</span> <code class="parameter">$link_identifier</code><span class="initializer"> = NULL</span></span> ] )</div> <p class="para rdfs-comment"> Get the number of affected rows by the last INSERT, UPDATE, REPLACE or DELETE query associated with <em><code class="parameter">link_identifier</code></em>. </p> </div> <div class="refsect1 parameters" id="refsect1-function.mysql-affected-rows-parameters"> <h3 class="title">Parameters</h3> <p class="para"> <dl> <dt> <span class="term"><em><code class="parameter"> link_identifier</code></em></span><dd> <p class="para">The MySQL connection. If the link identifier is not specified, the last link opened by <span class="function"><a href="function.mysql-connect.html" class="function">mysql_connect()</a></span> is assumed. If no such link is found, it will try to create one as if <span class="function"><a href="function.mysql-connect.html" class="function">mysql_connect()</a></span> was called with no arguments. If no connection is found or established, an <strong><code>E_WARNING</code></strong> level error is generated.</p></dd> </dt> </dl> </p> </div> <div class="refsect1 returnvalues" id="refsect1-function.mysql-affected-rows-returnvalues"> <h3 class="title">Return Values</h3> <p class="para"> Returns the number of affected rows on success, and -1 if the last query failed. </p> <p class="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. </p> <p class="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 <span class="function"><strong>mysql_affected_rows()</strong></span> may not actually equal the number of rows matched, only the number of rows that were literally affected by the query. </p> <p class="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. </p> <p class="para"> In the case of "INSERT ... ON DUPLICATE KEY UPDATE" queries, the return value will be <em>1</em> if an insert was performed, or <em>2</em> for an update of an existing row. </p> </div> <div class="refsect1 examples" id="refsect1-function.mysql-affected-rows-examples"> <h3 class="title">Examples</h3> <p class="para"> <div class="example" id="example-1564"> <p><strong>Example #1 <span class="function"><strong>mysql_affected_rows()</strong></span> example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />$link </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">'localhost'</span><span style="color: #007700">, </span><span style="color: #DD0000">'mysql_user'</span><span style="color: #007700">, </span><span style="color: #DD0000">'mysql_password'</span><span style="color: #007700">);<br />if (!</span><span style="color: #0000BB">$link</span><span style="color: #007700">) {<br /> die(</span><span style="color: #DD0000">'Could not connect: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">mysql_error</span><span style="color: #007700">());<br />}<br /></span><span style="color: #0000BB">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #DD0000">'mydb'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* this should return the correct numbers of deleted records */<br /></span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">'DELETE FROM mytable WHERE id < 10'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Records deleted: %d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">mysql_affected_rows</span><span style="color: #007700">());<br /><br /></span><span style="color: #FF8000">/* with a where clause that is never true, it should return 0 */<br /></span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">'DELETE FROM mytable WHERE 0'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">"Records deleted: %d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">mysql_affected_rows</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Records deleted: 10 Records deleted: 0 </pre></div> </div> </div> </p> <p class="para"> <div class="example" id="example-1565"> <p><strong>Example #2 <span class="function"><strong>mysql_affected_rows()</strong></span> example using transactions</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br />$link </span><span style="color: #007700">= </span><span style="color: #0000BB">mysql_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">'localhost'</span><span style="color: #007700">, </span><span style="color: #DD0000">'mysql_user'</span><span style="color: #007700">, </span><span style="color: #DD0000">'mysql_password'</span><span style="color: #007700">);<br />if (!</span><span style="color: #0000BB">$link</span><span style="color: #007700">) {<br /> die(</span><span style="color: #DD0000">'Could not connect: ' </span><span style="color: #007700">. </span><span style="color: #0000BB">mysql_error</span><span style="color: #007700">());<br />}<br /></span><span style="color: #0000BB">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #DD0000">'mydb'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/* Update records */<br /></span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"UPDATE mytable SET used=1 WHERE id < 10"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">printf </span><span style="color: #007700">(</span><span style="color: #DD0000">"Updated records: %d\n"</span><span style="color: #007700">, </span><span style="color: #0000BB">mysql_affected_rows</span><span style="color: #007700">());<br /></span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"COMMIT"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>The above example will output something similar to:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> Updated Records: 10 </pre></div> </div> </div> </p> </div> <div class="refsect1 notes" id="refsect1-function.mysql-affected-rows-notes"> <h3 class="title">Notes</h3> <blockquote class="note"><p><strong class="note">Note</strong>: <strong>Transactions</strong><br /> <p class="para"> If you are using transactions, you need to call <span class="function"><strong>mysql_affected_rows()</strong></span> after your INSERT, UPDATE, or DELETE query, not after the COMMIT. </p> </p></blockquote> <blockquote class="note"><p><strong class="note">Note</strong>: <strong>SELECT Statements</strong><br /> <p class="para"> To retrieve the number of rows returned by a SELECT, it is possible to use <span class="function"><a href="function.mysql-num-rows.html" class="function">mysql_num_rows()</a></span>. </p> </p></blockquote> <blockquote class="note"><p><strong class="note">Note</strong>: <strong>Cascaded Foreign Keys</strong><br /> <p class="para"> <span class="function"><strong>mysql_affected_rows()</strong></span> does not count rows affected implicitly through the use of ON DELETE CASCADE and/or ON UPDATE CASCADE in foreign key constraints. </p> </p></blockquote> </div> <div class="refsect1 seealso" id="refsect1-function.mysql-affected-rows-seealso"> <h3 class="title">See Also</h3> <p class="para"> <ul class="simplelist"> <li class="member"> <span class="function"><a href="function.mysql-num-rows.html" class="function" rel="rdfs-seeAlso">mysql_num_rows()</a> - Get number of rows in result</span></li> <li class="member"> <span class="function"><a href="function.mysql-info.html" class="function" rel="rdfs-seeAlso">mysql_info()</a> - Get information about the most recent query</span></li> </ul> </p> </div> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="ref.mysql.html">MySQL Functions</a></div> <div class="next" style="text-align: right; float: right;"><a href="function.mysql-client-encoding.html">mysql_client_encoding</a></div> <div class="up"><a href="ref.mysql.html">MySQL Functions</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>