2016-09-09 9 views
2

Firebird 2.1をYiiで(プラグインhttp://www.yiiframework.com/extension/yii2-firebird/を使用して)使用しようとしていますが、挿入(保存)コマンドを実行しているときにエラーメッセージが表示されます:Firebirdの結果を取得する方法INSERT ... Yiiで返す

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

そして、私は問題は、以下であることを推測する:Yiiは、この挿入コマンドの結果を読み取るしようとしますが、そこにある、私はYiiのは、RETURNING句、などで挿入文を生成することを見出した

SQLSTATE[HY000]: General error: -502 Cursor is not open

Yii- pdoStatement->executeの直後にカーソルを閉じるFirebirdプラグイン。例外は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. 誰でも経験が何であるかのYiiとFirebirdのを、使用していますか?

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

て、それを修正するには:コードを説明するための方法

  • ?私は、この方法は、カーソルが開いているかどうかを確認する目的で、Yii-Firebirdプラグインでオーバーライドする必要があると思います。

  • +2

    Firebirdの 'INSERT .. RETURNING'は、実行可能なストアドプロシージャ(つまり、戻り値を持つストアドプロシージャですが、' suspend'はありません)と同じように動作します。サーバーの観点から結果セットを生成することはなく、単一行を結果として返します。したがって、Yiiで実行可能なストアドプロシージャを実行する方法が分かっている場合は、同じメソッドを 'INSERT ... RETURNING'に使用することができます。 –

    +0

    [PHP PDOをFirebird INSERTで使用する...重複しないで戻す/ストアドプロシージャ](http://stackoverflow.com/questions/39448052/use-of-php-pdo-with-firebird-insert-returning-stored-procedure-without-susp) –

    答えて

    1

    最初の質問の回答。 YII2では、私は"edgardmessias/yii2-firebird"を使用します: "^ 0.7.1"、拡張for Firebird 2.1.1883。 私はそれがより良いActiveDataProviderではない動作しますが、SearchModelで

    $dataProvider = new ArrayDataProvider([

    とすることがわかりました。関係を使って検索している間に、そのようにエラーはあまりありません。 しかし、主な問題は、大文字と小文字を区別する検索です。私はいつも検索フィールドに同じ文字を書く必要がありました。

    関連する問題