|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #42619 Problem with prepared statement
Submitted: 2007-09-10 20:50 UTC Modified: 2007-09-12 08:44 UTC
From: lmanseau at claurendeau dot qc dot ca Assigned:
Status: Not a bug Package: MySQLi related
PHP Version: 5.2.4 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: lmanseau at claurendeau dot qc dot ca
New email:
PHP Version: OS:


 [2007-09-10 20:50 UTC] lmanseau at claurendeau dot qc dot ca
I try to execute a prepared statement with mysqli. I use PHP 5.2.0 with MySQL 5.0.27

After some tests, prepared statements with MySQL instructions  such as (INSERT, DELETE and UPDATE) work very well.

The only case problem which I pointed out, it is the instruction SELECT that does not seem to react of good manner

-	SELECT * FROM table1 ? don?t work
-	SELECT C1, C2 FROM table1 - don?t work

I have no error message!!!

Reproduce code:
$db = new mysqli($hote, $util, $mpas, $base);  
if (!$db) { 
   echo "No connection with BD"; 

echo 'Non prepared statement<br />'; 
$sql = "select * from ch9books";  
$rqp = $db->query($sql);  
echo 'books = '.$rqp->num_rows.'<br />'; 

echo '<br />Prepared statement<br />'; 
$sql = "select * from ch9books";  
$rqp = $db->prepare($sql); 
echo 'books = '.$rqp->num_rows.'<br />'; 


Expected result:
Non prepared statement
Books = 6 

Actual result:
Prepared statement 
Books = 0


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2007-09-11 08:52 UTC] uwendel at mysql dot com
Please provide a reproducible test case, including SQL definitions and "the other statements" you mention, if they are needed for a minimum test case.

 [2007-09-11 15:10 UTC] lmanseau at claurendeau dot qc dot ca
Here is the SQL definition:

  c1 int(4) unsigned zerofill NOT NULL auto_increment,
  c2 varchar(10) default NULL,
  c3 double(4,2) default NULL,

Code with problem:

// Opening connection
include ('../mysql/');
$db = new mysqli($hote, $util, $mpas, $base); 
if (!$db) {
	echo "No connection!";
echo 'Non Prepared Request<br />';  //WORK WELL
$sql = "select * from test1"; 
$rqp = $db->query($sql); 
echo 'Rows = '.$rqp->num_rows.'<br />';

echo '<br />Prepared Request<br />'; //DON'T WORK
$sql = "select * from ch9books"; 
$rqp = $db->prepare($sql);
echo 'Rows = '.$rqp->num_rows.'<br />';

// Closing connection 

And the results...

Non Prepared Request
Rows = 6

Prepared Request
Rows = 0
 [2007-09-12 08:39 UTC] uwendel at mysql dot com
Stupid me, ... no bug, of course - wrong API usage. 

Prepared Statements work with unbuffered result sets by default. PS can't tell you how many rows there are in the result set before you either have:

 - stored the result set / turned it into a buffered result set
 - fetched all data

You have neither called mysqli_stmt_store_result() nor fetched all results before you call mysqli_stmt_num_rows(). Therefore, mysqli_stmt_num_rows() returns 0, which is correct.

"Returns the number of rows in the result set. The use of mysqli_stmt_num_rows()  depends on whether or not you used mysqli_stmt_store_result() to buffer the entire result set in the statement handle.

If you use mysqli_stmt_store_result(), mysqli_stmt_num_rows() may be called immediately. "

See also
 [2007-09-12 08:44 UTC]
Wrong usage of API, ext/mysqli acts as described in the manual
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Mon Jan 17 23:03:42 2022 UTC