Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PostgreSQL准备语句不与plsql if语句一起使用_Php_Postgresql_If Statement_Prepared Statement_Plpgsql - Fatal编程技术网

Php PostgreSQL准备语句不与plsql if语句一起使用

Php PostgreSQL准备语句不与plsql if语句一起使用,php,postgresql,if-statement,prepared-statement,plpgsql,Php,Postgresql,If Statement,Prepared Statement,Plpgsql,好的,我这里有一个pgsql查询和一个plsql if语句: DO $do$ BEGIN IF $1 & (SELECT group_flags FROM technic WHERE id = $2 LIMIT 1) > 0 THEN UPDATE technic SET group_flags = group_flags - $1 WHERE id = $2; END IF; END $do$ 我正在用pg_prepare()PHP函数准备它,然后执行它。 问题是pgsq

好的,我这里有一个pgsql查询和一个plsql if语句:

DO
$do$
BEGIN
IF $1 & (SELECT group_flags FROM technic WHERE id = $2 LIMIT 1) > 0 THEN
   UPDATE technic SET group_flags = group_flags - $1 WHERE id = $2;
END IF;
END
$do$
我正在用pg_prepare()PHP函数准备它,然后执行它。 问题是pgsql返回此错误-

Warning: pg_execute(): Query failed: ERROR: bind message supplies 2 parameters, but prepared statement "query1990094225" requires 0
但我在查询中有两个参数

为了确保语法没有问题,我用整数替换了参数,一切都按预期进行

我不明白问题出在哪里


提前谢谢

您不能对参数使用
DO
语句,但幸运的是您不必:

UPDATE technic
SET group_flags = group_flags - $1
WHERE id = $2
  AND (SELECT group_flags
       FROM technic
       WHERE id = $2
       LIMIT 1
      ) > 0

匿名代码块不接受参数。谢谢,这个答案在技术上与原始代码不一样(进行了编辑但被拒绝了…),但是我现在修复了我的代码,一切都很好。我真是太蠢了,我拒绝了更新,因为你的简单语句与问题中的
DO
语句不相等。但如果这是你真正需要的陈述,那么使用它会更好。