2017-10-13 37 views
1

所使用的查询只返回1行/结果,所以当我试图获取密码栏,我必须写:如果MySQL查询返回1个结果,我是否必须指定我想从结果[0]得到密码?

var hash = results[0].password; 

我试图

var hash = results.password; 

但随后哈希变得不确定。

router.post('/', function(req, res, next) { 
    var username = req.body.username; 
    var password = req.body.password; 

    db.query('SELECT * FROM user WHERE username = ?', [username], function (error, results, fields) { 
    if (error) throw error; 
    var hash = results[0].password; 
    console.log(hash); 
    }); 

    res.redirect('/'); 

}); 
+0

我想因为应用程序不知道它只有一行;是。您必须仍然从结果中获得第一个([0])行。如果你愿意,循环一切;你不需要。除非你实现了一个只有一行的方法,例如“.GetResultRow”,这可能会返回一行。 – Paramone

回答

2

是,results简直是一个数组,即使有一排,你仍然需要告诉它你一行试图访问。 results没有属性password,但其中的第一行是。

我假设你也有(或将包括)确保至少有一行的逻辑?否则,如果结果没有(可能用户不存在),则调用results[0]也会导致错误。

+0

这不正确的PHP正确吗?我可以用mysqli_fetch_assoc($ result)获取一行,然后用$ password = $ row ['password']获取密码。 – Bobimaru

+0

这是相同的概念,但如果你正在做通常的'for($ row = mysqli ...)',那么你已经引用了一个特定的行。 – kchason