2015-05-29 2 views
1

Недавно я начал использовать PDO несколько дней назад, и я меняю весь свой код mysqli, но, похоже, я столкнулся с кирпичной стеной. Теперь этот код работал красиво, когда я использовал mysqli, но теперь я не могу распечатать результат. Этот код в основном принимает входное значение пароля, а пароль хеширования в базе данных соответствует им, и если оба они равны, то пользователь будет зарегистрирован. Моя проблема заключается в том, что я не могу найти способ получить пароль из моей базы данных. Любая помощь приветствуется. Спасибо.Mysqli to PDO conversion

<?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 = новый PDO ('MySQL: хост = локальный; имя_бд = rabbit_users', $ пользователь, $ шунтирования);' дважды. –

+0

Так что я должен поддерживать только строку Connection только в инструкции try. Еще раз спасибо за вашу помощь! –

+0

, если пароль в базе данных хэширован ... его не будет соответствовать паролю из сообщения в инструкции WHERE ... если сообщение также не хэшируется? – Soujirou

ответ

2

fetchAll возвращает массив, содержащий все строки набора результатов. Таким образом, вы можете получить доступ к password с помощью $data_array[0]['password'], если вы использовали его. Вместо этого вы можете использовать fetch.

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

Большое спасибо за помощь :). Теперь я просто уродую, чтобы хэш-пароль. Другой способ, который я вижу вокруг проблемы с хешем пароля, - создать 3 пароля (с algo obv), а затем сопоставить хэш с хэшем фактического пароля. Но это что-то вроде грубого, заставляющего себя ха-ха! –