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()
をサニタイズする2番目のパラメータがに渡されます。
connection.query('SELECT * FROM users WHERE id = ?', [userId], function(err, results) {
// ...
});
この2つを一緒に使用するにはどうすればよいのでしょうか。結合で識別子をエスケープする必要があるが、ネストされたテーブルのオプションを宣言したいとします。
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()
次のように、エスケープ値を2番目のパラメーターとして渡そうとしました。
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) {
...
});
しかし、役に立たない。とにかくこれを行うことができるかどうか疑問に思いますか?