我希望能够在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=>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 5.3.1版
Yii 1.1.9版
Mysql版本5.1.41-3ubuntu12.10
最后我发现了问题,而且是php版本。https://bugs.php.net/bug.php?id=39858我更新了版本,直到PHP版本5.3.2,现在运行良好。请注意,对于同一版本,它不能在windows下工作,只能在linux下工作。(至少对我来说)。