我正在尝试执行这样的查询:
SELECT * FROM table WHERE id IN (1,2,3,4)
问题是我要过滤的 id 列表不是恒定的,每次执行时都需要不同。我还需要转义 id,因为它们可能来自不受信任的来源,尽管无论来源的可信度如何,我实际上都会转义查询中的任何内容。
node-postgres 似乎只适用于绑定参数client.query('SELECT * FROM table WHERE id = $1', [ id ])
:如果我有已知数量的值(client.query('SELECT * FROM table WHERE id IN ($1, $2, $3)', [ id1, id2, id3 ])
),这将起作用,但不能直接使用数组:client.query('SELECT * FROM table WHERE id IN ($1)', [ arrayOfIds ])
,因为似乎没有对数组参数进行任何特殊处理。
根据数组中的项目数动态构建查询模板并将 ids 数组扩展为查询参数数组(在我的实际情况下,它还包含除 ids 列表之外的其他参数)似乎过于繁琐。在查询模板中硬编码 id 列表似乎也不可行,因为 node-postgres 不提供任何值转义方法。
这似乎是一个非常常见的用例,所以我的猜测是我实际上忽略了一些东西,而不是不可能将常见的IN (values)
SQL 运算符与 node-postgres 一起使用。
如果有人以比我上面列出的更优雅的方式解决了这个问题,或者如果我真的错过了关于 node-postgres 的一些东西,请帮忙。