【问题标题】:Using LIMIT / ORDER BY with pg Postgres NodeJS as a Parameter使用 LIMIT / ORDER BY 和 pg Postgres NodeJS 作为参数
【发布时间】:2015-12-02 04:56:13
【问题描述】:

我有一个模型用 SORT/PAGE/PER PAGE 调用产品 它可以很好地使用数值作为参数而不是字符串。 这工作正常...

params.limit = 12
client.query('SELECT * FROM products LIMIT $1', [params.limit], function(err, result)

然而这并不...

params.sort = 'product_id'
params.direction = 'DESC'
client.query('SELECT * FROM products ORDER BY $1 $2', [params.sort, params.direction], function(err, result)`

我认为这是因为它将单词 DESC 包装为 'DESC' 但我不知道如何在不将其直接注入字符串的情况下实现这一点。

同样LIMIT 传递一个整数总是有效,但传递ALL 不是出于同样的原因。

任何帮助都会非常有用!

【问题讨论】:

  • 你不能这样做,node-postgres 在查询格式方面非常有限。但是,pg-promise 具有更好的查询格式。在您的示例中,这是一个典型的 raw query parameter injection
  • 谢谢,我一定会看看这个!

标签: node.js postgresql pg


【解决方案1】:

我认为您可能需要进行明确的比较:

order by (case when $2 = 'ASC' then $1 end) ASC,
         (case when $2 = 'DESC' then $1 end) DESC

【讨论】:

  • 它是否以任何特定方式失败?
  • 我也可以使用ORDER BY 作为参数,但在准备好的语句中(不会转义引号!)。让我试试这个方法。我认为connection.escape 不会像准备好的那样工作。
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2017-09-18
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2011-12-29
相关资源
最近更新 更多