2015-05-29 46 views
1

我最近開始使用PDO幾天前,我正在改變我所有的mysqli代碼,但我似乎碰到了一堵磚牆。現在,當我使用mysqli時,此代碼運行得非常好,但現在我似乎無法打印出結果。這段代碼基本上把密碼的輸入值和數據庫中密碼的輸入值匹配起來,如果兩者相等,那麼用戶將會登錄。我的問題是,我似乎無法找到一種方法來獲取來自我的數據庫的密碼。任何幫助將非常感激。謝謝。Mysqli到PDO轉換

<?php 
session_start(); 

$user = "root"; 
$pass = ""; 

$mcon = new PDO('mysql:host=localhost;dbname=rabbit_users', $user, $pass); 

try { 
$mcon = new PDO('mysql:host=localhost;dbname=rabbit_users', $user, $pass); 
$mcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
echo 'ERROR: ' . $e->getMessage(); 



//prepare statement 
$password = $_POST['password']; 

$stmt = $mcon->prepare("SELECT `password` FROM members WHERE password=:password"); 
$stmt->bindParam(":password", $_POST['password']); 
$stmt->execute(); 

//get_result 
$data_array = $stmt->fetchAll(); 
$stmt->fetch(PDO::FETCH_ASSOC); 

//echo passwords 
print 'Password from form: ' . $password . '<br />'; 
print 'Password from DB: ' . $data_array['password'] . '<br />'; 

//verify password 
if (password_verify($password, $data_array['password'])) { 
    print 'success'; 
    exit(); 
}else{ 
    print 'Try again m9'; 
    exit(); 
} 
+0

你不需要'$ mcon = new PDO('mysql:host = localhost; dbname = rabbit_users',$ user,$ pass);'兩次。 –

+0

所以我應該只保留在try語句中的Connection行。再次感謝您的幫助! –

+0

如果數據庫中的密碼被哈希......它不會匹配該WHERE語句中帖子的密碼......除非帖子被哈希了嗎? – Soujirou

回答

2

fetchAll返回一個包含所有結果集行的數組。所以如果你使用它,你可以訪問password$data_array[0]['password']。 您可能需要使用fetch

$data_array = $stmt->fetch(PDO::FETCH_ASSOC); 
+0

非常感謝您的幫助:)。現在我只需要散列密碼。我發現密碼哈希問題的另一種方法是創建3個密碼(使用算法obv),然後將這些哈希與實際密碼的哈希匹配。但這是一種強迫自己哈哈! –