ID: 39618 User updated by: randy at rcs-comp dot com Reported By: randy at rcs-comp dot com -Status: Bogus +Status: Open Bug Type: PDO related Operating System: Windows XP PHP Version: 5.2.0 New Comment:
Tony, Thank you for your time on this and the explanation. However, I still think this represents a bug in PHP for three reasons. 1) The documentation says "PDOStatement::rowCount -- Returns the number of rows affected by the last SQL statement" Notice that it says "the last" SQL statement. In my example, the rowCount() returns the SUM of several SQL statements not the total of the "last SQL statement." This function does not work the way the documentation says it does, and is therefore buggy. 2) I understand what you are saying about "this is how it is supposed to work in Sqlite2." However, just because SQLite2 is working correctly does not automatically mean that PDO is working correctly. PDO is a database abstraction layer whose purpose is to hide the implimenation details of the specific drivers for PHP developers. If you don't fix this bug, every SQLite2 developer would need to be aware of this driver specific issue and code around it. 3) I tested PDO MySQL, PDO Mssql, and PDO SQLite 3 and NONE of them exhibit the behavior of PDO SQLite2. This is a huge incompatability for the SQLite 2 driver. I welcome a difference of opinion, but honestly it seems pretty clear to me that this is a bug. Previous Comments: ------------------------------------------------------------------------ [2006-11-28 11:07:12] [EMAIL PROTECTED] See http://www.sqlite.org/cvstrac/tktview?tn=383 "The sqlite_changes API function returns the number of rows that have been inserted, deleted, or modified since the database was last quiescent. A "quiescent" database is one in which there are no outstanding calls to sqlite_exec and no VMs created by sqlite_compile that have not been finalized by sqlite_finalize." This is how it is supposed to work in Sqlite2, but Sqlite3 seems to work differently. ------------------------------------------------------------------------ [2006-11-24 14:56:53] randy at rcs-comp dot com Description: ------------ After using prepare() & execute() to retrieve a PDO Statement from a PDO Sqlite2 connection, subsequent calls to exec() return a "rows affected" value that appears to sum the previous calls to exec() together. Reproduce code: --------------- http://www.rcs-comp.com/phpcode/simple_pdo_test3.php.txt Expected result: ---------------- >php simple_pdo_test3.php rows updated w/ exec() (some): 2 2 rows updated w/ exec() (all): 3 3 statement preped and all records retrieved rows updated w/ exec() (some): 2 2 rows updated w/ exec() (all): 3 3 rows updated w/ exec() (some): 2 2 rows updated w/ prep & execute() (all): 3 3 Actual result: -------------- >php simple_pdo_test3.php rows updated w/ exec() (some): 2 2 rows updated w/ exec() (all): 3 3 statement preped and all records retrieved rows updated w/ exec() (some): 2 2 rows updated w/ exec() (all): 3 5 <-- notice the addition from the prev. row rows updated w/ exec() (some): 2 7 <-- notice the addition from the prev. row rows updated w/ prep & execute() (all): 3 3 <-- problem disappears ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39618&edit=1