pg_prepare:不能在准备好的语句中插入多个命令

Hik*_*ari 5 php postgresql transactions prepared-statement

我有 2 个表,TableA 和 TableB。TableB 有一个指向 TableA 的 fk 字段。

我需要对 TableA 使用 DELETE 语句,当其中的一条记录被删除时,我需要删除 TableB 中与 TableA 中该记录相关的所有记录。很基本。

begin;

DELETE FROM TableB
WHERE nu_fornecedor = $1;

DELETE FROM TableA
WHERE nu_fornecedor = $1;

commit;
Run Code Online (Sandbox Code Playgroud)

此字符串传递给 pg_prepare(),但随后出现错误 ERROR: cannot insert multiple commands into a prepared statement

好的,但是我需要在同一个事务中运行这两个命令,我不能执行 2 个分开的语句。我尝试在没有开始提交的情况下使用 with 并得到同样的错误。

知道怎么做吗?

Chr*_*ers -1

为了了解正在发生的情况以及您的选择,让我解释一下什么是准备好的声明,什么不是。您可以使用 pg_prepare,但只能用于单独的语句,不能用于整个事务。

准备好的语句是传递给 PostgreSQL 的语句,然后对其进行解析并存储为解析树以供将来使用。第一次执行时,将使用提供的输入来规划解析树,并执行该规划,并缓存该计划以供将来使用。通常,使用准备好的语句没有什么意义,除非您想重用查询计划(即执行一堆相同的更新语句,命中大致相同的行数),所有这些都在同一个事务中。

如果您想要一些可以从解析树中分离参数但不缓存计划的功能,请参阅 PHP 文档中的 pg_query_param() 。这可能就是你想要的。