转义 knex mysql 查询语句



我对knex和数据库一般都很陌生,所以这是一个初学者问题。我在 knex 文档中没有明确提及这一点。非原始 knex 查询是否自动"安全"?

其次,对于原始查询,我有几个类似于这样的原始语句:

var condition = _.map(ids, function(id) {
    return '`id`=' + id;
}).join(' OR ');
knex('categories')
    .whereRaw(condition)
    .select('*')
    .catch(_error.bind(null, cb))
    .then(function(res) { ... });

使用此处描述的函数在条件中转义id是否足以转义该查询?在这种情况下,还有什么需要注意的?

所有 knex 查询都是安全的,如果使用参数绑定语法,其中?替换为转义值 (http://knexjs.org/#Raw),则knex.raw()查询也是安全的。

您正在执行的查询最好在没有原始的情况下完成,如下所示

knex('categories').whereIn('id', ids).catch(...).then(...);

如果要使用列引用(又名标识符)的自动转义,则可以使用whereRaw('?? = ?', ['id', value]),它将第一部分作为标识符进行转义,将第二部分作为值进行转义。

因此,使用参数转义您的示例将是这样的:

var condition = _.map(ids, function() {
    return '?? = ?';
}).join(' OR ');
var conditionParameters = _.flatten(_.map(ids, function(id) {
    return ['id', id];
}));
knex('categories')
    .whereRaw(condition, conditionParameters)
    .select('*')
    .catch(_error.bind(null, cb))
    .then(function(res) { ... });

但是,我不得不说,与使用这种方式的原始条件相比,几乎总是有更好的方法来执行knex查询。

相关内容

  • 没有找到相关文章

最新更新