如何检索Firebird INSERT的结果...在Yii中返回

时间:2016-09-09 12:21:17

标签: php yii2 firebird

我正在尝试将Firebird 2.1与Yii一起使用(使用插件http://www.yiiframework.com/extension/yii2-firebird/)但我在执行插入(保存)命令时遇到问题,错误消息是:

  

SQLSTATE [HY000]:常规错误:-502光标未打开

我发现Yii使用return子句生成插入语句,例如:

INSERT INTO CONTRACTS (contract_no) VALUES (10002) RETURNING contract_no

我猜这个问题如下:Yii尝试从这个insert命令中读取结果但是Yii-Firebird插件存在问题,它会在pdoStatement->execute之后立即关闭游标。该异常在yii/db/Command.php文件函数 protected function queryInternal($method, $fetchMode = null) 中生成,其代码为:

 $this->pdoStatement->execute();

 if ($method === '') {
     $result = new DataReader($this);
 } else {
    if ($fetchMode === null) {
        $fetchMode = $this->fetchMode;
    }
    try {
        $result = call_user_func_array([$this->pdoStatement, $method], (array) $fetchMode);
        $this->pdoStatement->closeCursor();
    } catch (Exception $ex) {
        Yii::trace('Fetch error', 'yii\db\Command::query');
    }
}

我有以下问题:

  1. 有没有人使用Firebird和Yii,经验是什么?

  2. 如何解释代码:

    call_user_func_array([$this->pdoStatement, $method], (array) $fetchMode);

  3. 在哪里纠正?我想在Yii-Firebird插件中应该覆盖这个方法,目的是检查光标是否打开,如果需要,打开光标?

1 个答案:

答案 0 :(得分:1)

回答第一个问题。 使用YII2,我使用Firebird 2.1.1883的" edgardmessias / yii2-firebird":" ^ 0.7.1",扩展名。 我发现最好不要使用ActiveDataProvider,而是使用

  

$ dataProvider = new ArrayDataProvider([

SearchModel中的

。这种方式与关系搜索时的错误并不多。 但主要问题是区分大小写的搜索。我总是需要在搜索字段中写相同的字母记录有哪些,大或小。