【发布时间】:2017-10-23 09:44:43
【问题描述】:
我使用 Yii2 DAO 执行 SQL 查询。
$db->createCommand("
DO $$
DECLARE
rec RECORD;
pos INT := 0;
BEGIN
FOR rec IN (SELECT * FROM table1 WHERE "type" = :t LOOP
UPDATE table1 SET position = pos WHERE id = rec.id;
pos := pos + 2;
END LOOP;
END;
$$ language 'plpgsql'
", [':t' => 0])->execute();
但它失败并出现错误:
SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR: could not determine data type of parameter $1
type 列具有 INT 类型。我尝试使用[':t' => [0, \PDO::PARAM_INT]] 显式设置参数类型。但是错误仍然存在。如果我将值直接连接到 SQL 字符串中,它可以工作,但这不是解决方案。 :t 只是此查询中的一个参数。
其他简单的 SQL 查询也能成功运行。此问题仅存在于带有过程的查询。如果我从 DataGrip 运行这个查询,它就可以工作。但在 PHP 中它失败了。
为什么它不起作用以及如何为此类查询绑定参数?
【问题讨论】:
标签: php postgresql pdo yii2 plpgsql