"non-integer constant in ORDER BY" 将 pg-promise 与命名参数一起使用时



我正试图使用pgp-promise库编写一个简单的查询。我最初的实现看起来像:

var bar = function(orderBy){
  var qs = 'select * from mytable order by ${orderBy};';
  return db.many(qs,{orderBy:orderBy});
}
...
bar('id').then(...)

但这给出了non-integer constant in ORDER BY的误差我还尝试在${orderBy}周围添加引号,并在orderBy参数中添加双引号,但无济于事。我通过做var qs = 'select * from mytable order by "' + orderBy + '";'有一个工作解决方案,虽然它应该是显而易见的,为什么我不想在项目中这样的代码。

我的问题:是否有一种方法可以让pg-promise构建一个不容易受到sql注入的order by子句的查询?

是否有一种方法可以让pg-promise构建一个不容易受到sql注入的order by子句的查询?

ORDER BY子句的值为SQL名称,使用SQL名称进行格式化:

const bar = function(orderBy) {
    const qs = 'select * from mytable order by ${orderBy:name}';
    return db.many(qs, {orderBy});
}

:raw/^是注入原始文本,当它来自外部时很容易受到SQL注入,并且仅用于在服务器内部创建和预格式化的字符串。

最新更新