【问题标题】:how to get mysql stored procedure output param in yii framework如何在yii框架中获取mysql存储过程输出参数
【发布时间】:2013-05-11 07:14:27
【问题描述】:

我正在使用 Yii 来处理一个 mysql 存储过程。 sp 有几个参数,其中一个是输出参数。

执行sp后,当我尝试获取输出参数时,我遇到了错误

CDbCommand 未能执行 SQL 语句:SQLSTATE[HY000]:一般错误:2014 在其他无缓冲查询处于活动状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。执行的 SQL 语句是:select @error_info as result;

我的模拟代码是这样的:

$sql = 'CALL p_bid(:username, @param)';
$command = Yii::app()->db->createCommand($sql);
$command->bindParam(":username", $username, PDO::PARAM_STR);

$command->execute();

// the following line raise the error
$errorInfo = Yii::app()->db->createCommand("select @error_info as result;")->queryScalar();  

我怎样才能绕过这个问题?谢谢。

【问题讨论】:

  • mock up code有输入错误,param应该是error_info'
  • 只需点击“编辑”即可编辑您的帖子。 :)
  • 可能值得一试:stackoverflow.com/questions/9017861/… 根据该帖子,这是一个 PHP 错误,已通过更新到 PHP 5.3.2 得到修复。
  • 感谢您的提示,我会尝试您的建议,稍后再回来。
  • 我想通了,没有正确使用是我的错误。我应该添加以下几行。 $command->getPdoStatement()->fetchAll(); 261 $command->getPdoStatement()->closeCursor();

标签: php stored-procedures yii


【解决方案1】:

试试这个,它对我有用

$command = $connection->createCommand("CALL r emove_places(:user_id,:placeID,:place_type,@out)"); 
$command->bindParam(":user_id",$user_id,PDO::PARAM_INT);
$command->bindParam(":placeID",$placeID,PDO::PARAM_INT);
$command->bindParam(":place_type",$place_type,PDO::PARAM_INT);
$command->execute();
$valueOut = $connection->createCommand("select @out as result;")->queryScalar(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多