Экранирование запросов с параметром параметров для объединений с перекрывающимися именами столбцов
В документации по 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) {
...
});