PostgreSQL Подготовленный оператор не работает с оператором pl sql if - PullRequest
0 голосов
/ 25 февраля 2020

Хорошо, у меня есть запрос pg sql здесь с оператором pl sql 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, а затем выполняю Это. Проблема в том, что pg sql возвращает эту ошибку -

Warning: pg_execute(): Query failed: ERROR: bind message supplies 2 parameters, but prepared statement "query1990094225" requires 0

Но у меня есть два параметра в запросе ...

И чтобы убедиться, что синтаксис не проблема, я заменил параметры целыми числами, и все заработало как положено.

Я не понимаю, в чем проблема.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 февраля 2020

Вы не можете использовать оператор DO с параметрами, но, к счастью, вам не нужно:

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