Firebird 程序不仅仅在 PDO 中执行

Posted

技术标签:

【中文标题】Firebird 程序不仅仅在 PDO 中执行【英文标题】:Firebird procedure is not performed only in PDO 【发布时间】:2014-06-11 07:11:23 【问题描述】:

我有一个 Firebird 程序:

CREATE OR ALTER procedure INSERT_LABELS_SET (
    IN_NAME varchar(50))
returns (
    OUT_ID smallint)
as
begin
    IF ((SELECT COUNT(*) FROM labels_sets WHERE name=:in_name) = 0) THEN
    INSERT INTO labels_sets(name) VALUES (:in_name) RETURNING id into :out_id;
suspend;
end

当我尝试在 php 中执行它时:

/**
 * @var $stmt PDOStatement
 */
$stmt = $this->db->prepare('EXECUTE PROCEDURE insert_labels_set(?);');
$stmt->execute(array($value));

我收到一个错误:

SQLSTATE[HY000]:一般错误:-804 动态 SQL 错误 SQL 错误代码 = -804 SQLDA 结构中的值不正确

我该如何解决这个错误?

此类问题仅存在于 PDO 中。当我使用 ibase_connect() 时,一切正常。

【问题讨论】:

从未使用过firebird,但begin 块内的参数变量不应该是@in_name@out_id 吗? 这有帮助吗? ***.com/questions/19709935/… 没用。仅当我使用 PDO 时才会出现此类错误 你在执行之前绑定了参数吗? $stmt->bindParam(1, 'label', PDO::PARAM_STR); 是的,我试过了。不工作 【参考方案1】:

解决方案:

$stmt = $this->db->prepare('SELECT OUT_ID from insert_labels_set(?);');
$stmt->execute(array($value));

但是为什么以前的版本不行,我不明白

【讨论】:

以上是关于Firebird 程序不仅仅在 PDO 中执行的主要内容,如果未能解决你的问题,请参考以下文章

WAMP 中的 pdo_firebird 扩展

“连接被远程接口拒绝”使用 PDO 连接到 Firebird 3

当有“ñ”字母时,带有firebird的PDO会抛出“�”

Delphi:如何以编程方式创建 Firebird 数据库

iis6.0+php5.6无法加载firebird模块

使用PDO运行查询并根据条件执行大量操作