CDbCommand :: fetchColumn()失败:SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询

时间:2012-01-26 12:04:25

标签: php mysql pdo yii

我希望能够从OUT params中的mysql存储过程获得一些输出,但是对于存储过程也通过select语句返回结果集的情况,如下所示。

DELIMITER $$

DROP PROCEDURE IF EXISTS `RD`.`sp`$$

CREATE DEFINER=`root`@`%` PROCEDURE `sp`(in b int, out a int)
BEGIN
select 664656 into a;

select 5;
END$$

DELIMITER ;

逐个在控制台中运行下面提到的命令

call sp(5,@a)
select @a

我们会得到结果     5 =>五     @a => 664656

然而,当我尝试从php运行相同的代码时获得错误

[error] [system.db.CDbCommand] CDbCommand::fetchColumn() failed: 
SQLSTATE[HY000]: 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.. The SQL statement executed was: select @a as result;.

下面请找我的PHP代码。

$connection = Yii::app ()->db;
    $b=7;
    $command = $connection->createCommand ( "CALL sp(:b,@a)" );
    $command->bindParam ( ":b", $b, PDO::PARAM_INT );
    $command->execute();

    $command->getPdoStatement()->fetchAll();

    $command->getPdoStatement()->closeCursor();

    $valueOut = $connection->createCommand ( "select @a as result;" )->queryScalar ();


    echo $valueOut;

任何想法如何解决???

PHP Version 5.3.1

Yii版本1.1.9

Mysql版本5.1.41-3ubuntu12.10

1 个答案:

答案 0 :(得分:1)

最后我发现了问题,它是用php版本的。 https://bugs.php.net/bug.php?id=39858 我将版本更新到PHP版本5.3.2,现在工作正常。 请注意它在相同版本的Windows下不起作用,只能在linux下运行。(至少对我而言)。