使用Node.js和MySQL在RowDataPacket内部调用对象

时间:2018-08-15 03:14:17

标签: mysql node.js node-mysql

  

有关以下代码:

TreeA
  

我尝试过的事情:

我尝试使用con.query(`SET @row_num = 0; SELECT @row_num := @row_num + 1 AS row_number, userid, username, lvl FROM users ORDER BY lvl + 0 DESC`, async (err, rowss) => { if(err) throw err; console.log(rowss[0].userid); }); rowss[0].userid。但非想为我工作。但是,当我单独使用rowss.userid时,会得到以下输出:

rowss
  

我想要什么:

在RowDataPacket内部调用一个对象并进行控制台记录。 所以我想要的基本上是我打字的时候:

[ OkPacket {
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 10,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0 },
[ RowDataPacket {
  row_number: 1,
  userid: '123',
  username: 'test1#5245',
  lvl: '113' },
RowDataPacket {
  row_number: 2,
  userid: '456',
  username: 'test2#8272',
  lvl: '112' },
RowDataPacket {
  row_number: 3,
  userid: '789',
  username: 'test3#5873',
  lvl: '91' },
RowDataPacket {
  row_number: 4,
  userid: '012',
  username: 'test4#0581',
  lvl: '78' }.................

输出结果为:

console.log(rowss[0].username + ' - ' + rowss[0].lvl);
console.log(rowss[3].username + ' - ' + rowss[3].lvl);
  

我的问题:

例如,每当我尝试test1#5245 - 113 (Since this is the first row in the array). test4#0581 - 78 (Since this is the 4th row). 时,我都会得到console.log(rowss[0].username);。这适用于所有对象。所以也有userid,lvl等。

1 个答案:

答案 0 :(得分:2)

在创建数据库连接时,您已将多条语句设为true。这会导致多个结果集

  

multipleStatements:是

结果集下面是对语句SET @row_num = 0;的响应

OkPacket {
fieldCount: 0,
affectedRows: 0,
insertId: 0,
serverStatus: 10,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0 }

select查询的数据结果在数组的第二个位置可用
选择查询数据可以如下访问

rowss[1][0].row_number
rowss[1][0].userid
rowss[1][0].lvl