2015-04-05 4 views
0

Я довольно новичок в PHP и слежу за учебниками Lynda.com (хотя они по-прежнему используют mysql вместо mysqli или PDO).Невозможно получить значение из массива PDO

У меня возникли проблемы с использованием данных, которые я получаю из своих запросов.

Я буду использовать мою страницу входа в систему, как, например, оставляя Подключаться к БД часть:

$login_username = trim(htmlspecialchars($_POST['username'])); 
$password = trim(htmlspecialchars($_POST['password'])); // from login form 

$stmt = $db->prepare("SELECT * FROM users 
        WHERE username = :login_username"); 

$stmt->bindParam(':login_username', $login_username); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_ASSOC); 
if($stmt->rowCount() > 0 && $result = password_verify($password,$result['hashed_password'])) { 
$_SESSION['logged_in_id'] = $result['id']; 
$_SESSION['logged_in_username'] = $login_username; //this was the only way I could pass the username as I could not get it from $result['username'] 
$_SESSION['first_name'] = $result['first_name']; 
$_SESSION['last_name'] = $result['last_name']; 

Ничто не передается на сессии, и нет никаких ошибок. Я также не могу выделить значение $ result. Если я просто попытаюсь выполнить эхо-результат, то я просто получу значение 1

Пожалуйста, помогите!

ответ

1

Ваша проблема:

... && $result = password_verify($password,$result['hashed_password']) 

Обратите внимание, что $result представляет собой массив, который содержит строку, вы просто неправдоподобным, и вы присвоив ему новое значение здесь; вы переписываете свою переменную $result, чтобы потом все назначения не выполнялись.

Вы, вероятно, хотите что-то вроде:

... && password_verify($password,$result['hashed_password']) 

Также обратите внимание, что вы не должны полагаться на rowCount(), как это не обязательно то, что вы ожидаете для SELECT заявления.

Как вы извлечение строки уже, вы можете просто сделать:

if ($result && password_verify($password,$result['hashed_password'])) 

Если нет результата, то второе условие не будет проверяться, так что не приведет к предупреждению или ошибке.

+1

Ты мой герой !!! Большое вам спасибо, имеет смысл, и теперь это работает. –

+0

@FrancoisStander Посетите http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work, затем вернитесь к ответу и сделайте то же самое, чтобы правильно закрыть вопрос и отметить его как решена. ;-) * Добро пожаловать в Stack *. –

+0

Понял, спасибо. Мне нравится этот сайт :) –

Смежные вопросы