【发布时间】:2019-10-09 06:49:35
【问题描述】:
我正在更新我的 postgreSQL 数据库中的 JSONB 字段(使用 PHP Symfony DBAL),但我还使用参数样式数据绑定来消除 SQL 注入的风险。
我的查询如下所示:
UPDATE car SET
features =
CASE
WHEN features ? 'exterior' THEN
JSONB_SET(features, '{exterior, ' || :type || '}', TO_JSONB(:property::TEXT))
ELSE JSONB_SET(features, '{exterior}', '{' || :type || ': ' || :property || '}'::JSONB)
END
WHERE id IN (:ids);
我的代码如下所示:
$stmt = $this->db()->executeQuery($sql,
['type' => 'color', 'property' => 'red', 'ids' => [12,32,43,232,3442]],
['type' => \PDO::PARAM_STR, 'date' => \PDO::PARAM_STR, 'ibcodes' => \Doctrine\DBAL\Connection::PARAM_INT_ARRAY]
);
我得到的错误:
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1"
LINE 4:
WHEN features $1 'exterior' THEN
显然是 JSONB 运算符?被误认为是数据绑定项。有没有办法解决?
【问题讨论】:
标签: php postgresql symfony jsonb dbal