ID:               42548
 Comment by:       uwendel at mysql dot com
 Reported By:      garethjo at usc dot edu
 Status:           Assigned
 Bug Type:         MySQLi related
 Operating System: Windows XP, Windows 2003
 PHP Version:      5.2.4
 Assigned To:      georg
 New Comment:

Your code snippets does not show proper usage of mysqli_multi_query().


Stored Procedures that return n result sets will return n + 1 result
sets. In your case, it's two result sets to fetch and eat up before you
can reuse the line. The error message from the server is exactly about
that. Proper usage of mysqli_multi_query() looks like this:

if (mysqli_multi_query($link, 'CALL p()')) {
  do {
    if ($res = mysqli_store_result($link)) {
     while ($row = mysqli_fetch_assoc($res))
       var_dump($row);
     mysqli_free_result($res);
    }
 } while (mysqli_more_results($link) && mysqli_next_result($link));

} else {
  printf("Cannot call SP, [%d] %s\n", 
    mysqli_errno($link), mysqli_error($link));
}

I see you replacing mysqli_[real_]query() with mysqli_multi_query() but
I do not see the more_results()/next_result() loop etc. You continue
using the syntax for SPs which do not return a result set.

Ulf


Previous Comments:
------------------------------------------------------------------------

[2007-09-11 17:44:25] al dot smith at aeschi dot ch dot eu dot org

$query = "CALL count_runs(".$row["id"].", ".$minyear.",
".$maxyear.")";
$db->multi_query($query) or die ("Error in query: $query. " .
$db->error);

This was my query.

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

[2007-09-11 15:54:04] garethjo at usc dot edu

No it doesn't, I tried it with both before sending in the bug report.

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

[2007-09-11 10:00:30] uwendel at mysql dot com

Does using mysqli_multi_query() work for you? Currently you are using
mysqli_real_query() to call the SP. See also,
http://dev.mysql.com/doc/refman/5.1/en/call.html. If a stored procedure
produces result sets, you must use mysqli_multi_query(). 

Ulf

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

[2007-09-09 10:42:13] [EMAIL PROTECTED]

Georg (or whoever maintains mysqli nowadays), check this out. Seems
like some regression bug between 5.2.3 / 5.2.4 crept in..

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

[2007-09-07 18:00:17] al dot smith at aeschi dot ch dot eu dot org

I'm seeing this exact bug as well. Rolling back to 5.2.3 fixes the
problem.

For me, executing the CALL() statement within a mysql> client session
works just fine...

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/42548

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

Reply via email to