Javascript SQL查询仅返回一行,而不返回多行

时间:2019-05-23 02:05:41

标签: javascript sql express

所以我有一个包含多行测试结果的表。应试者的ID插入到每一行中,实际上我已经使用登录的用户在表中插入了更多行,因此我知道它的正确性。 结果只是将一个结果打印到控制台上

router.get('/tableResults',function(req, res, next) {
  console.log(req.session.passport.user);
  const db = require('./db_connection.js');
  var id = req.session.passport.user;

  db.query('SELECT * FROM testResults where id = ?',[id], function(error, results, fields) {  
    // results are displayed where the user ids match
    if(error) throw error;
    var results = results[0];

    console.log (" 1st " + results);

    var tableData = [ results]; 

    console.log (tableData);

    res.redirect('/home');
  });
});

//错误导致腻子

Nodemon] starting `node ./bin/www`

24 

Connected!

 1st [object Object]

[ RowDataPacket {

test_id: 1,

username: 'rr',

gradeOne: 1,

gradeTwo: 7,

gradeThree: 0,

id: 24 } ]

GET /tableResults 302 169.552 ms - 54

24

true
GET /home 304 89.895 ms - -
GET /dist/css/bootstrap.min.css 404 10.086 ms - 3199

2 个答案:

答案 0 :(得分:0)

在查询的回调函数中,您具有三个参数; errorresultsfields。在回调函数的范围内,您声明一个变量也称为results,并将其分配给results参数的第一项,即results[0]

删除var results = results[0];,然后访问结果中的所有行,应遍历整个数组;

for(var i = 0; i < results.length; i++) {
  console.log (results[i]);
}

您不应重复这样的变量名。了解可变范围具有挑战性; What is the scope of variables in JavaScript?。为避免此类问题,请在代码顶部声明use strict来触发Strict Mode

答案 1 :(得分:0)

您要仅以第一个结果(结果[0])设置“结果”。

这样做也是多余的。

尝试这种方式:

router.get('/tableResults',function(req, res, next) {
  console.log(req.session.passport.user);
  const db = require('./db_connection.js');
  var id = req.session.passport.user;

  db.query('SELECT * FROM testResults where id = ?',[id], function(error, results, fields) {  
    // results are displayed where the user ids match
    if(error) throw error;

    console.log ("1st: ", results[0]);
    console.log ('All: ', results);

//here you can iterate [for loop] trough 'results' to show one row at a time if you need/want

    res.redirect('/home');
  });
});

我做了什么:

1-固定将结果设置为第一个结果(以前的结果= results [0])

2-删除了不必要的var tableData,因为'results'具有相同的值。