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 中执行的主要内容,如果未能解决你的问题,请参考以下文章