ID:               39858
 Comment by:       bepoteat at yahoo 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:

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!)


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

[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.

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

[2008-04-05 20:53:08] mgrdinic at sledxchange dot com

Same problem here-I'm on Vista Ultimate SP1 and IIS 7 MySQL 5.0.45

The trick is regular NON-Select queries work as expected. It's when
your Stored Procedures return result sets the problems show up. 

So for example, if the first query performs a one off select and
closes, the second query is hit with the "SQLSTATE[HY000]: General
error: 2014 Cannot execute queries while other unbuffered queries are
active error". And yes, that's with using the fetchAll.

However, if I remove the select statement from the first procedure and
run the code again, both stored procedures work fine.  

I've tried the latest snap-shots, but unfortunately I couldn't get pdo
to even load. Any ideas? Updates?

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

[2008-04-05 16:56:25] php at pofik dot com

Hi there - so is there a proper fix for this by now? I just started
using stored procedures more extensively and I am now hit by this bug
all the time (Windows XP SP2, MySQL 5.0.51a, PHP 5.2.1)! Apparently this
bug is a known problem since at least October 2005 (Bug #5827), so I'd
think this should be long fixed?? However, I cannot locate any
information on a proper fix except for a bunch of makeshift workarounds
(using ODBC, abandoning the connection on HY000 etc.), and tons of
people complaining about it not being fixed. 

Considering how long this bug is known and open, it would help if
someone could post some update. This issue is really really annoying.

Thanks!

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

[2008-02-07 12:57:17] kraus at phoenix-medien dot de

This PDO bug makes it impossible to install Magento on Windows
platforms. See
http://www.magentocommerce.com/wiki/general/installing_on_windows_with_xampp_and_wamp
for further information.

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

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

Reply via email to