Bug #50941 [Opn->Bgs]: pdo throws "unbuffered queries" error when use a sp and ATTR_EMULATE_PREPARES

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
Edit report at http://bugs.php.net/bug.php?id=50941&edit=1

 ID:               50941
 Updated by:       [email protected]
 Reported by:      ies_clan at hotmail dot com
 Summary:          pdo throws "unbuffered queries" error when use a sp
                   and ATTR_EMULATE_PREPARES
-Status:           Open
+Status:           Bogus
 Type:             Bug
 Package:          PDO related
 Operating System: Windows XP home
 PHP Version:      5.3.1

 New Comment:

No bug here. Everything works fine if you use the API as you should.
Your code lacks calls to stmt->nextrowset():

do {
print_r($Query1->fetchAll());
} while ($Query1->nextrowset());


Previous Comments:
------------------------------------------------------------------------
[2010-02-05 19:15:01] ies_clan at hotmail dot com

Description:
------------
if u call a stored procedure and then a normal sql statement, while u
use ATTR_EMULATE_PREPARES = false, u got an error like:
General error: 2014 Cannot execute queries while other unbuffered
queries are active. Consider using PDOStatement::fetchAll(). 
Alternatively, if your code is only ever going to run against mysql, you
may enable query buffering by setting the
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

to set PDO::MYSQL_ATTR_USE_BUFFERED_QUERY have no effect.

uf u use closeCursor(); u got that error:
Packets out of order

Reproduce code:
---------------
/*
-- 
-- Table structure for table `testtabelle`
-- 

DROP TABLE IF EXISTS `testtabelle`;
CREATE TABLE `testtabelle` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(45) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `testtabelle` VALUES
(1,'test'),(2,'test'),(3,'test'),(4,'test'),(5,'tesfsst');

DELIMITER $$

DROP PROCEDURE IF EXISTS `myTestProd` $$
CREATE PROCEDURE `myTestProd` ()
BEGIN
SELECT * FROM testtabelle;
END $$

DELIMITER ;
 */

$Database = new PDO('mysql:dbname='.DATABASE.';host='.DATABASE_SERVER,
    DATABASE_USER,
    DATABASE_PASSWORD,
    array(
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_PERSISTENT => false,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
    )
);

$Query1 = $Database->prepare('CALL myTestProd()');
$Query1->execute();
print_r($Query1->fetchAll());
$Query1->closeCursor();

$Query2 = $Database->prepare('SELECT * FROM testtabelle');
$Query2->execute();
print_r($Query2->fetchAll());
$Query1->closeCursor();  

Expected result:
----------------
Array
(
    [0] => Array
        (
            [ID] => 1
            [0] => 1
            [Name] => test
            [1] => test
        )

    [1] => Array
        (
            [ID] => 2
            [0] => 2
            [Name] => test
            [1] => test
        )

    [2] => Array
        (
            [ID] => 3
            [0] => 3
            [Name] => test
            [1] => test
        )

    [3] => Array
        (
            [ID] => 4
            [0] => 4
            [Name] => test
            [1] => test
        )

    [4] => Array
        (
            [ID] => 5
            [0] => 5
            [Name] => tesfsst
            [1] => tesfsst
        )

)
Array
(
    [0] => Array
        (
            [ID] => 1
            [0] => 1
            [Name] => test
            [1] => test
        )

    [1] => Array
        (
            [ID] => 2
            [0] => 2
            [Name] => test
            [1] => test
        )

    [2] => Array
        (
            [ID] => 3
            [0] => 3
            [Name] => test
            [1] => test
        )

    [3] => Array
        (
            [ID] => 4
            [0] => 4
            [Name] => test
            [1] => test
        )

    [4] => Array
        (
            [ID] => 5
            [0] => 5
            [Name] => tesfsst
            [1] => tesfsst
        )

)


Actual result:
--------------
Array
(
    [0] => Array
        (
            [ID] => 1
            [0] => 1
            [Name] => test
            [1] => test
        )

    [1] => Array
        (
            [ID] => 2
            [0] => 2
            [Name] => test
            [1] => test
        )

    [2] => Array
        (
            [ID] => 3
            [0] => 3
            [Name] => test
            [1] => test
        )

    [3] => Array
        (
            [ID] => 4
            [0] => 4
            [Name] => test
            [1] => test
        )

    [4] => Array
        (
            [ID] => 5
            [0] => 5
            [Name] => tesfsst
            [1] => tesfsst
        )

)
. Expected 1 received 11. Packet size=7


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



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=50941&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.