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');
}
}
私は、次の質問がある:
誰でも経験が何であるかのYiiとFirebirdのを、使用していますか?
call_user_func_array([$this->pdoStatement, $method], (array) $fetchMode);
て、それを修正するには:コードを説明するための方法
?私は、この方法は、カーソルが開いているかどうかを確認する目的で、Yii-Firebirdプラグインでオーバーライドする必要があると思います。
Firebirdの 'INSERT .. RETURNING'は、実行可能なストアドプロシージャ(つまり、戻り値を持つストアドプロシージャですが、' suspend'はありません)と同じように動作します。サーバーの観点から結果セットを生成することはなく、単一行を結果として返します。したがって、Yiiで実行可能なストアドプロシージャを実行する方法が分かっている場合は、同じメソッドを 'INSERT ... RETURNING'に使用することができます。 –
[PHP PDOをFirebird INSERTで使用する...重複しないで戻す/ストアドプロシージャ](http://stackoverflow.com/questions/39448052/use-of-php-pdo-with-firebird-insert-returning-stored-procedure-without-susp) –