Php Firebird程序不仅仅在PDO中执行
我有一个Firebird程序:Php Firebird程序不仅仅在PDO中执行,php,stored-procedures,pdo,firebird,Php,Stored Procedures,Pdo,Firebird,我有一个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
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()时,一切都能正常工作。解决方案:
$stmt = $this->db->prepare('SELECT OUT_ID from insert_labels_set(?);');
$stmt->execute(array($value));
但是为什么以前的版本不起作用,我不明白,从未使用过firebird,但是
begin
块中的参数变量不应该是@in\u name
和@out\u id
吗?这有帮助吗?这没用。只有在我使用PDO时才会发生这种错误。在执行之前您是否绑定了参数$stmt->bindParam(1,'label',PDO::PARAM_STR);是的,我试过了。不起作用