Mysqli到PDO转换

问题描述:

我最近开始使用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

fetchAll返回一个包含所有结果集行的数组。所以如果你使用它,你可以访问password$data_array[0]['password']。 您可能需要使用fetch

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

非常感谢您的帮助:)。现在我只需要散列密码。我发现密码哈希问题的另一种方法是创建3个密码(使用算法obv),然后将这些哈希与实际密码的哈希匹配。但这是一种强迫自己哈哈! –