使用 LIMIT / ORDER BY 和 pg Postgres NodeJS 作为参数

Posted

技术标签:

【中文标题】使用 LIMIT / ORDER BY 和 pg Postgres NodeJS 作为参数【英文标题】:Using LIMIT / ORDER BY with pg Postgres NodeJS as a Parameter 【发布时间】: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 谢谢,我一定会看看这个! 【参考方案1】:

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

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

【讨论】:

它是否以任何特定方式失败? 我也可以使用ORDER BY 作为参数,但在准备好的语句中(不会转义引号!)。让我试试这个方法。我认为connection.escape 不会像准备好的那样工作。

以上是关于使用 LIMIT / ORDER BY 和 pg Postgres NodeJS 作为参数的主要内容,如果未能解决你的问题,请参考以下文章

php查询使用“Order By .... Limit”后如何使用“Order by”?

为啥 MySQL 查询在使用 LIMIT 和 Order BY 时会变慢?

SQL:使用 UNION、ORDER BY 和 LIMIT 进行选择

使用 LEFT JOIN 和 ORDER BY...LIMIT 查询慢,使用 Filesort

在 sql 查询中使用 LIMIT 和 ORDER BY 和 LEFT JOIN

SQL(ORACLE):ORDER BY 和 LIMIT [重复]