在 Sequelize 中,我可以使用
my_table.findAll({ order: [['datetime', 'desc']] })
查询数据并按列排序。但是当我尝试使用参数化原始查询时,例如:
var input_parameters = {order_column: 'datetime', order: 'desc'};
sequelize.query('select * from my_table order by :order_column :order', { replacements: input_parameters, type: models.sequelize.QueryTypes.SELECT });
它无法返回正确的顺序,因为 订单信息 asc/desc 在查询中被转义,最终准备好的查询类似于 'select * from my_table order by 'datetime' 'desc''。
有没有办法将订单信息传递给原始参数化查询?
这可能不是 Sequelize 方式,但是......如果:
let order_column = 'something';
let order = 'DESC';
sequelize.query(`select * from my_table order by ${order_column} ${order}`, { type: models.sequelize.QueryTypes.SELECT });
更新:这是正确答案
await sequelize.query(
'SELECT * FROM projects ORDER BY ? ?',
{
replacements: ['something', 'desc'],
type: QueryTypes.SELECT,
}
);
这种方式sequelize仍然可以保护你免受sql注入(inject)。
我是一名优秀的程序员,十分优秀!