Edit report at https://bugs.php.net/bug.php?id=55582&edit=1

 ID:                 55582
 Updated by:         and...@php.net
 Reported by:        and...@php.net
 Summary:            mysqli_num_rows() returns always 0 for unbuffered,
                     when mysqlnd is used
-Status:             Open
+Status:             Assigned
 Type:               Bug
 Package:            MySQLi related
 Operating System:   all
 PHP Version:        5.4SVN-2011-09-05 (SVN)
-Assigned To:        
+Assigned To:        andrey
 Block user comment: N
 Private report:     N



Previous Comments:
------------------------------------------------------------------------
[2011-09-05 15:29:32] and...@php.net

Automatic comment from SVN on behalf of andrey
Revision: http://svn.php.net/viewvc/?view=revision&revision=316188
Log: Fix for Bug #55582 mysqli_num_rows() returns always 0 for unbuffered, when 
mysqlnd is used

------------------------------------------------------------------------
[2011-09-05 09:49:29] and...@php.net

Description:
------------
 As the description says, there is wrong check in mysqli, which doesn't allow 
the mysqlnd code to run. mysqli returns always 0 for num_rows() even if the 
whole result set has been read. This bug exists since 5.3.0, which first 
bundled mysqli with mysqlnd.

Test script:
---------------
./php -r 
'$c=mysqli_connect("127.0.0.1","root","root","test");var_dump($c->real_query("SELECT
 1"));var_dump($res=$c->use_result(), mysqli_num_rows($res), 
$res->fetch_assoc(), mysqli_num_rows($res), $res->fetch_assoc(), 
mysqli_num_rows($res));'

Expected result:
----------------
Warning: mysqli_num_rows(): Function cannot be used with MYSQL_USE_RESULT in 
Command line code on line 1

Warning: mysqli_num_rows(): Function cannot be used with MYSQL_USE_RESULT in 
Command line code on line 1
object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(1)
  ["lengths"]=>
  array(1) {
    [0]=>
    int(1)
  }
  ["num_rows"]=>
  int(1)
  ["type"]=>
  int(0)
}
int(0)
array(1) {
  [1]=>
  string(1) "1"
}
int(0)
NULL
int(1)  ----- here is the difference

Actual result:
--------------
Warning: mysqli_num_rows(): Function cannot be used with MYSQL_USE_RESULT in 
Command line code on line 1

Warning: mysqli_num_rows(): Function cannot be used with MYSQL_USE_RESULT in 
Command line code on line 1
object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(1)
  ["lengths"]=>
  array(1) {
    [0]=>
    int(1)
  }
  ["num_rows"]=>
  int(1)
  ["type"]=>
  int(0)
}
int(0)
array(1) {
  [1]=>
  string(1) "1"
}
int(0)
NULL
int(0) --- should have been 1


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55582&edit=1

Reply via email to