在 pg-promise 中使用数组

Using arrays with pg-promise

我正在使用 pg-promise,我不明白如何 运行 这个查询。第一个查询有效,但我想使用 pg-promise 的安全字符转义,然后我尝试第二个查询它不起作用。

作品:

db.any(`SELECT title FROM books WHERE id = ANY ('{${ids}}') ORDER BY id`)

不起作用

db.any(`SELECT title FROM books WHERE id = ANY () ORDER BY id`, ids)

这个例子有两个问题。首先,它违背了 documentation tells you:

IMPORTANT: Never use the reserved ${} syntax inside ES6 template strings, as those have no knowledge of how to format values for PostgreSQL. Inside ES6 template strings you should only use one of the 4 alternatives - $(), $<>, $[] or $//.

手动查询格式化,就像在您的第一个示例中一样,是一种非常糟糕的做法,会导致不好的事情,从查询中断到 SQL 注入。

第二个问题是,在切换到正确的 SQL 格式后,您应该使用 CSV Filter 来正确格式化值列表:

db.any(`SELECT title FROM books WHERE id IN ($/ids:csv/) ORDER BY id`, {ids})

或通过索引变量:

db.any(`SELECT title FROM books WHERE id IN (:csv) ORDER BY id`, [ids])

请注意,我还从 ANY 更改为 IN 操作数,因为我们在此处提供了一个开放值列表。

您可以根据需要交替使用过滤器 :list