2016-02-07 4 views
2

Я довольно новичок в knex и базах данных в целом, так что это вопрос начинающих. Об этом я не нашел никакого упоминания в knex docs. Необработанные запросы knex автоматически «безопасны»?Выполнение запросов запроса mysql

Во-вторых, для сырых запросов, у меня есть несколько сырых заявления, подобные этим:

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 в состоянии с функцией описывается here быть достаточным, чтобы избежать этого запроса? Что еще можно посмотреть в таком сценарии?

ответ

3

Все запросы knex являются безопасными, а также запросы knex.raw(), если вы используете синтаксис связывания параметров, где ? заменены экранированными значениями (http://knexjs.org/#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, чем при использовании сырых условиях сделали этот путь.

+0

Спасибо, это именно то, что я искал! – bendulum

+0

raw должен использоваться в любой ситуации, когда knex не имеет методов построения запросов. например используя случай - 'raw (" (SELECT (CASE WHEN ... WHERE something =?) как 'cool_column'), ['myvalue'] ")' – duhseekoh