Экранирование запросов с параметром параметров для объединений с перекрывающимися именами столбцов

В документации по node-mysql для npm (https://npmjs.org/package/mysql) есть опция для перекрывающихся имен столбцов в соединениях таблиц, которая выглядит следующим образом:

var options = {sql: '...', nestTables: true};
connection.query(options, function(err, results) {
  /* results will be an array like this now:
  [{
    table1: {
      fieldA: '...',
      fieldB: '...',
    },
    table2: {
      fieldA: '...',
      fieldB: '...',
    },
  }, ...]
  */
});

Выходящий формат идентификатора запроса передает второй параметр connection.query() который дезинфицирует идентификаторы:

connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {
  // ...
});

Мне интересно, как вы можете использовать эти два вместе? Скажем, вам нужно экранировать идентификаторы в соединении, но вы хотите объявить опции для вложенных таблиц:

var sqlString: 'SELECT * FROM TableOne INNER JOIN TableTwo ON TableOne.id = TableTwo.tableone_id WHERE TableOne.id = ?';
var options = {sql: sqlString, nestTables: true};
connection.query(options, function(err, results) {
    ...
});

Я попытался передать escape-значения в качестве второго параметра в connection.query() вот так:

var sqlString: 'SELECT * FROM TableOne INNER JOIN TableTwo ON TableOne.id = TableTwo.tableone_id WHERE TableOne.id = ?';
    var options = {sql: sqlString, nestTables: true};
    connection.query(options, 1, function(err, results) {
        ...
    });

Но безрезультатно. Мне интересно, есть ли способ сделать это?

1 ответ

Если вы читаете код, в строке 66 есть блок IF

if (typeof sql === 'object') {
  options = sql;
  cb      = values;
  values  = options.values;
}

значит, вы бы сделали

var sqlString: 'SELECT * FROM TableOne INNER JOIN TableTwo ON TableOne.id = TableTwo.tableone_id WHERE TableOne.id = ?';
var options = {sql: sqlString, nestTables: true, values: [1]};
connection.query(options, function(err, results) {
  ...
});
Другие вопросы по тегам