我正在尝试执行这样的查询:
SELECT * FROM table WHERE id IN (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
问题是我要过滤的ID列表不是常量,每次执行时都需要不同.我还需要逃避id,因为它们可能来自不受信任的来源,尽管我实际上会逃避查询中的任何内容,无论源的可信度如何.
节点的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数组扩展到查询参数数组(在我的实际情况下,除了id列表之外还包含其他参数)似乎是不合理的负担.在查询模板中对id列表进行硬编码似乎也不可行,因为node-postgres不提供任何值转义方法.
这似乎是一个非常常见的用例,所以我的猜测是我实际上忽略了某些东西,而不是不可能将常见的IN (values)
SQL运算符与node-postgres一起使用.
如果有人以比我上面列出的方式更优雅的方式解决了这个问题,或者如果我真的错过了关于node-postgres的内容,请帮忙.
我正在尝试测试将参数传递给 sql.DB.Query 方法的行为(使用 database/sql 包和github.com/lib/pq上的 PostgreSQL 驱动程序)。有没有办法在处理后获取原始查询字符串以查看参数是如何插入的?例如,我正在考虑编写一个准备好的查询,然后检查生成的语句。有任何想法吗?谢谢!