2017-10-13 66 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