我正在尝试将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');
}
}
我有以下问题:
有没有人使用Firebird和Yii,经验是什么?
如何解释代码:
call_user_func_array([$this->pdoStatement, $method], (array) $fetchMode);
在哪里纠正?我想在Yii-Firebird插件中应该覆盖这个方法,目的是检查光标是否打开,如果需要,打开光标?
答案 0 :(得分:1)
回答第一个问题。 使用YII2,我使用Firebird 2.1.1883的" edgardmessias / yii2-firebird":" ^ 0.7.1",扩展名。 我发现最好不要使用ActiveDataProvider,而是使用
SearchModel中的$ dataProvider = new ArrayDataProvider([
。这种方式与关系搜索时的错误并不多。 但主要问题是区分大小写的搜索。我总是需要在搜索字段中写相同的字母记录有哪些,大或小。