1

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) {
        ...
    });

しかし、役に立たない。とにかくこれを行うことができるかどうか疑問に思いますか?

4

1 に答える 1

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) {
  ...
});
于 2013-05-20T21:53:40.160 に答える