2012-12-16 33 views
1

npm(https://npmjs.org/package/mysql)上node-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) { 
    ... 
}); 

我試圖通過逃避值作爲第二PARAM在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) { 
     ... 
    }); 

但無濟於事。我想知道是否有這樣做?

回答

0

如果你讀了代碼,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) { 
    ... 
}); 
+0

我知道這是過時的,但我碰到它,而尋找一個快速的答案,然後決定發佈我的解決方案。 –