简体   繁体   English

如何将多个RowDataPacket推入一个数组

[英]How to push multiple RowDataPacket into one Array

I got a data from MySQL and push it into new Array but it when I log it. 我从MySQL获取数据并将其推送到新的Array中,但在我记录时将其推送。 It doesn't have any data. 它没有任何数据。 I use for loop to get each data from DB and I don't know how to push RowDataPacket into new Array. 我使用for循环从数据库获取每个数据,但我不知道如何将RowDataPacket推入新的Array。

Or is there any way to combine two SQL into one SQL line? 还是有什么方法可以将两个SQL组合成一条SQL行?

router.get(`/find-users/:queryString`, function(req, res, next) {
  let queryString = req.params.queryString;
  db.query(
    `SELECT distinct userId from project WHERE keyword like "%${queryString}%"`,
    function(error, data) {
      if (error) {
        console.log(error);
      }
      // console.log(data);

      let userArray = [];
      for (let i = 0; i < data.length; i++) {
        db.query(
          `SELECT * FROM user WHERE loginId='${data[i].userId}'`,
          function(error, userData) {
            if (error) {
              console.log(error);
            } else {
              console.log("-----------------------");
              console.log(userData[0]);
              // userArray[i] = userData;
              userArray.push(userData[0]);
            }
          }
        );
      }
      console.log(`-------`);
      console.log(userArray);
      console.log(`-------`);
    }
  );
});

I have to make array like this. 我必须像这样制作数组。

[ RowDataPacket {
    loginId: '박동찬',
    displayId: '107688875506148574770',
    name: '박동찬',
    bio: 'NO BIO',
  RowDataPacket {
    loginId: 'jaagupkymmel',
    displayId: '1156051',
    name: 'Jaagup Kümmel',
    bio: 'NO BIO' }
]

But it only returns like this 但是它只会像这样返回

Result 结果

-------
[]
-------
const {promisify} = require('util')
router.get(`/find-users/:queryString`, async function (req, res, next) {
    const query = promisify(db.query).bind(db);
    let queryString = req.params.queryString;
    const data = await query(`SELECT distinct userId from project WHERE keyword like "%${queryString}%"`)
    if (!data) {
        console.log("error");
    }
    // console.log(data);

    let userArray = [];
    for (let i = 0; i < data.length; i++) {
        const userData = await query(`SELECT * FROM user WHERE loginId='${data[i].userId}'`)
        if (!userData) {
            console.log("error");
        } else {
            console.log("-----------------------");
            console.log(userData[0]);
            // userArray[i] = userData;
            userArray.push(userData[0]);
        }
    }
    console.log(`-------`);
    console.log(userArray);
    console.log(`-------`);
});

use this instead 用这个代替

function(error, userData, fields)

and you get an array like shown here https://www.w3schools.com/nodejs/nodejs_mysql_select.asp 你会得到一个像这里显示的数组https://www.w3schools.com/nodejs/nodejs_mysql_select.asp

And please read up on sql injection and node.js Preventing SQL injection in Node.js 并且请阅读有关SQL注入和node.js的信息,以防止在Node.js中进行SQL注入

in addition to above answer, 除了以上答案之外,

 [{ RowDataPacket: { loginId: '박동찬', displayId: '107688875506148574770', name: '박동찬', bio: 'NO BIO', RowDataPacket: { loginId: 'jaagupkymmel', displayId: '1156051', name: 'Jaagup Kümmel', bio: 'NO BIO' } } }] 

the json should be key value pair other it wont work. json应该是键值对,否则将无法正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM