ID: 39858 Comment by: jpmasseria at hotmail dot com Reported By: develar at gmail dot com Status: Assigned Bug Type: PDO related Operating System: Windows XP SP2 PHP Version: 5.2.0 Assigned To: wez New Comment:
The single line workaround worked for me! while (mysqli_next_result($conn)); Thank you bepoteat! This is much better than my previous workaround which was to close and reopen my database connection before my subsequent stored procedure call. John Previous Comments: ------------------------------------------------------------------------ [2008-07-14 15:31:00] ile at suomi dot finland This bug occurs with Apache/2.0.63 (Win32) PHP/5.2.6 and MySQL 5.0.51b. I don't use PDO. I use mysqli calls. The work-around by bepoteat helps though. ------------------------------------------------------------------------ [2008-05-02 16:48:43] bepoteat at yahoo dot com After looking at the PHP manual, I realized I could reduce the loop to a single line: while (mysqli_next_result($conn)); I didn't even have to use mysqli_free_result (but it is good practice). ------------------------------------------------------------------------ [2008-05-02 16:24:57] bepoteat at yahoo dot com I believe paulsidekick is correct. I am working on a page that repeatedly calls a stored proc that returns a resultset. After using the expected results from the first call, I tried moving to the next resultset and displaying the column values. I got nothing. Then I tried using mysqli_free_result($rs); while (mysqli_more_results($conn)) { mysqli_next_result($conn); echo count($row); mysqli_free_result($rs); } and got "0". So I decided to just get rid of the empty resultset. Below is the basic structure of the code that worked for me (note the while loop). $conn = mysqli_connect("server", "username", "password"); for ($i=1; $i<$someNumber; $i++) { $rs = mysqli_query($conn, "CALL spMyProc(param1, param2)"); if ($rs && $row = mysqli_fetch_asoc($rs)) { //some code to use results } else { //error handler } mysqli_free_result($rs); //Add this section to dispose of extra resultset. while (mysqli_more_results($conn)) { mysqli_next_result($conn); mysqli_free_result($rs); } } mysqli_close($conn); I know this doesn't exactly fix the problem, but it is a workaround that involves a minimal amount of code. (By the way, why doesn't the CAPTCHA box show up in Firefox? I had to use Internet Exploiter to post this. I thought PHP was all about being open source!) ------------------------------------------------------------------------ [2008-04-17 14:44:34] james dot lewis at americanmobileventures dot com Also having this error. PHP 5.2.5 on XP SP2, with Apache2 (XAMPP 1.6.6) ------------------------------------------------------------------------ [2008-04-05 21:04:45] mgrdinic at sledxchange dot com One last thing: It should be noted that you can "workaround" this issue by simply instantiating a whole new PDO object after every call that returns a result set. // create a PDO instance up here somewhere and perform your query... // get the return values you need... $result = $sth->fetchAll (); // and just create a new object... try { $dbh = new PDO ( $dsn, $user, $pass ); $dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); } catch ( PDOException $e ) { die ( 'PDO Connection Failed: ' . $e->getMessage () ); } // now you can query again without the error. It seem like the solution is simple to do. In fact, this guy seems to be on the right track: http://bugs.php.net/bug.php?id=42499 Why isn't this done! Oh well, hopefully the above, if not totally wrong : ) will help someone else. ------------------------------------------------------------------------ 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/39858 -- Edit this bug report at http://bugs.php.net/?id=39858&edit=1