使用 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