转义 knex mysql 查询语句
Escaping knex mysql query statements
总的来说,我对 knex 和数据库还很陌生,所以这是一个初学者问题。
我在 knex docs 中没有明确提到这一点。
非原始 knex 查询是否自动 "safe"?
其次,对于原始查询,我有几个与此类似的原始语句:
var condition = _.map(ids, function(id) {
return '`id`=' + id;
}).join(' OR ');
knex('categories')
.whereRaw(condition)
.select('*')
.catch(_error.bind(null, cb))
.then(function(res) { ... });
使用 here 描述的函数转义条件中的 id
是否足以转义该查询?
在这种情况下还需要注意什么?
所有 knex 查询都是安全的,如果您使用参数绑定语法,knex.raw()
查询也是安全的,其中 ?
被替换为转义值 (http://knexjs.org/#Raw)。
您正在做的查询最好在没有 raw 的情况下完成,如下所示
knex('categories').whereIn('id', ids).catch(...).then(...);
如果您想使用列引用的自动转义 a.k.a 标识符,您可以使用 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
中执行查询的方法总是比使用这种方式创建的原始条件要好得多。
总的来说,我对 knex 和数据库还很陌生,所以这是一个初学者问题。 我在 knex docs 中没有明确提到这一点。 非原始 knex 查询是否自动 "safe"?
其次,对于原始查询,我有几个与此类似的原始语句:
var condition = _.map(ids, function(id) {
return '`id`=' + id;
}).join(' OR ');
knex('categories')
.whereRaw(condition)
.select('*')
.catch(_error.bind(null, cb))
.then(function(res) { ... });
使用 here 描述的函数转义条件中的 id
是否足以转义该查询?
在这种情况下还需要注意什么?
所有 knex 查询都是安全的,如果您使用参数绑定语法,knex.raw()
查询也是安全的,其中 ?
被替换为转义值 (http://knexjs.org/#Raw)。
您正在做的查询最好在没有 raw 的情况下完成,如下所示
knex('categories').whereIn('id', ids).catch(...).then(...);
如果您想使用列引用的自动转义 a.k.a 标识符,您可以使用 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
中执行查询的方法总是比使用这种方式创建的原始条件要好得多。