Bug #67348 [Com]: Reading $dbc->stat modifies $dbc->affected_rows

From: Date: Sun, 21 Jun 2015 21:31:30 +0000
Subject: Bug #67348 [Com]: Reading $dbc->stat modifies $dbc->affected_rows
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-193745@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67348&edit=1 ID: 67348 Comment by: stephan dot eicher at check24 dot de Reported by: derick@php.net Summary: Reading $dbc->stat modifies $dbc->affected_rows Status: Open Type: Bug Package: MySQLi related Operating System: Linux PHP Version: 5.6Git-2014-05-27 (Git) Block user comment: N Private report: N New Comment: We are affected by this bug and it's very important for us because our framework relies on valid return values for "affected_rows". We can reproduce this issue on Debian Jessie with package php5 (5.6.x) and xdebug installed. Previous Comments: ------------------------------------------------------------------------ [2014-05-27 22:31:58] derick@php.net Description: ------------ When a script reads $dbc->stat, subsequent reads of $dbc->affected_rows return a different result. This was first reported to me as Xdebug bug #1053: http://bugs.xdebug.org/view.php?id=1053. I traced this back to the reading of ->stat as follows: - Xdebug's debugging command "context_get" reads all the variables in the local scope - For each object variable, the debug handlers are called (through Z_OBJDEBUG_PP): https://github.com/derickr/xdebug/blob/master/xdebug_var.c#L1725 - MySQLi debug handler loops over a list of properties: https://github.com/php/php-src/blob/master/ext/mysqli/mysqli_prop.c#L449 - The debug handler for affected_rows is at https://github.com/php/php-src/blob/master/ext/mysqli/mysqli_prop.c#L158 - The debug handler for stat is at https://github.com/php/php-src/blob/master/ext/mysqli/mysqli_prop.c#L256 - The debug handler for stat is defined at https://github.com/php/php-src/blob/master/ext/mysqlnd/mysqlnd.h#L212 - When I do *not* call "$foo = $dbc->stat", everything works. - I can not created a work around, because the debug handler loops over all properties, and I have no chance to prevent ->stat from being read from the Xdebug side. Test script: --------------- <?php $dbc = mysqli_connect('localhost', 'root', 'passwd', 'test'); $q = "INSERT INTO test1053 VALUES(7)"; $r = mysqli_query($dbc, $q); var_dump($dbc->affected_rows); $foo = $dbc->stat; var_dump($dbc->affected_rows); ?> Expected result: ---------------- int(1) int(1) Actual result: -------------- int(1) int(-1) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=67348&edit=1

« previous php.bugs (#193745) next »