2013-06-23 3 views
0

Я строю простую функцию входа в систему для сайта, и я столкнулся с некоторыми проблемами. Когда я пытаюсь войти на сайт, я продолжаю получать ошибку, которая не совпадает с именем пользователя и паролем. Это, конечно, ошибка, которую я определил сам, но проблема в том, что я не должен ее получать в этом случае.MySQL-запрос, хотя PHP не возвращает значения

Я напечатал рассчитанный хэш для пароля и удостоверился, что этот шаг был правильно выполнен, каким он был. После этого я провел

SELECT * FROM members WHERE user='username' AND pass='hashed_password'; 

непосредственно к моей базе данных MySQL, напрямую предоставляя имя пользователя и хэш. Это вернуло желаемые значения. Мой PHP код выглядит следующим образом:

$dsn = "mysql:host=localhost;dbname=my_db"; 
$u = "localhost"; 
$pdo = new PDO($dsn,$u); 
$query = $pdo->prepare("SELECT * FROM members WHERE user=':username' AND pass=':hashed_pass'"); 
$query->execute(array(':username'=>$username,':hashed_pass'=>$hashed_pass)); 
$result = $query->fetch(); 
if($result){ 
    //Log in user 
}else{ 
    //Print error 
} 

Это не возвращает ничего, даже если я поставить правильные значения, он продолжает давать мне ошибку. Я не уверен, что может вызвать проблему, но если я сделаю предположение, я бы сказал, что это связано с кодировками. Моя база данных использует UTF-8. Хотя, я все еще получил желаемые результаты от MySQL при запросе базы данных напрямую, используя SSH с ISO-8859. Поэтому я действительно не уверен. Любая помощь приветствуется!

+0

Откуда берутся $ username и $ hashed_pass, и вы уверены, что они содержат правильные значения? Используйте эхо, чтобы подтвердить это. –

+0

Это совершенно не связано, но вам лучше выбрать пользователя с именем пользователя, а затем совместить пароль получающейся таблицы пользователей с хешированным паролем с помощью php. – CreativityKills

+0

@CreativityKills Не уверен, что я согласен с этим. –

ответ

2

Попробуйте удалить кавычки. PDO НЕ заменяет заданные параметры, если они завернуты в кавычки.

Пример:

$st = $db->prepare('INSERT INTO users (name, surname) VALUES(:name, ":surname")'); 
$st->execute(array(':name' => 'John', ':surname' => 'Carlo')); 

Результаты:

-> Джон: фамилия

Вы также можете использовать debugDumpParams видеть параметры являются либо правильным или нет. http://www.php.net/manual/en/pdostatement.debugdumpparams.php

+0

Вот и все! Большое спасибо! – Psyberion

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