2015-10-18 140 views
1

我對PHP和PDO相當陌生,並且試圖製作一個簡單的登錄系統。現在,我試圖從我的表中獲取ID和密碼,以便與用戶輸入的密碼進行比較(我使用單向加密鹽)。所以,現在的問題是,當我只做$password = $stmt->fetchColumn(1)時,我的登錄系統工作。現在,當我嘗試通過在$password之前執行$id = $stmt->fetchColumn(0)來獲取id時,我無法再登錄,並且出現「錯誤的用戶名/密碼」錯誤。使用PHP PDO查詢選擇2列

現在我很確定我在做錯fetchColumn,但我無法弄清楚。

這裏有一個代碼段工程:

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    //set how pdo will handle errors 
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //this would be our query. 
$sql = "SELECT id, password FROM user_admin WHERE email = :email"; 

     //prepare the statements 
$stmt = $con->prepare($sql); 
    //give value to named parameter :email 
$stmt->bindValue("email", $this->email, PDO::PARAM_STR); 
$stmt->execute(); 

$password = $stmt->fetchColumn(1); 

現在下面不起作用。請注意,這種情況發生的時候我加入了$id

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    //set how pdo will handle errors 
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //this would be our query. 
$sql = "SELECT id, password FROM user_admin WHERE email = :email"; 

     //prepare the statements 
$stmt = $con->prepare($sql); 
    //give value to named parameter :email 
$stmt->bindValue("email", $this->email, PDO::PARAM_STR); 
$stmt->execute(); 


$id = $stmt->fetchColumn(0); //That's the problem 
$password = $stmt->fetchColumn(1); 

任何幫助是極大的讚賞。

+0

什麼是您的*真實*問題?你嘗試過var_dump($ id)嗎? – itinance

+0

@itinance是的。上面提到的問題是,當我添加$ id行時,我無法再登錄,並且出現「錯誤的用戶名/密碼」錯誤,而不是「您現在已登錄」 – nTuply

回答

6

documentation

PDOStatement對象:: fetchColumn - 從下一行的結果的設置

每次調用fetchColumn一次前進到下一行返回一列的結果集。

嘗試使用PDOStatement::fetch來取代整個行作爲數組,然後從那裏訪問值。

$stmt->execute(); 
$row = $stmt->fetch(); 
$id = $row[0]; 
$password = $row[1]; 
+0

這是正確的答案。 – MarkSkayff

+0

完美。我現在更瞭解它。謝謝 – nTuply