npm 上的 node-mysql 文档 (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) {
...
});
我尝试将转义值作为 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) {
...
});
但是没有效果。我想知道是否有办法做到这一点?
最佳答案
如果您阅读代码,第 66 行有一个 IF block
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) {
...
});
关于node.js - 使用选项参数转义具有重叠列名称的联接的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904204/