Сравнение хешей паролей mysql с использованием строки запроса, возвращающей 0 (не работает)

Я создаю систему входа в систему для моего сайта с использованием базы данных MySQL.

Когда пользователь регистрируется, он сохраняет пароль в базе данных, используя:

$password = hash("sha512","somesalt".$password."moresalt");

Затем, когда я вхожу в систему, я сравниваю введенный пароль с паролем в базе данных, используя ту же хеш-функцию.

Для сравнения базы данных я использую это:

$query = mysql_query("select * from users where password='$password' AND email='$email'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {//do login stuff}

Но ряды всегда возвращают 0. Когда я удаляю хеш-функцию как из регистра, так и из логина, она нормально регистрируется. В чем дело?

В качестве дополнительного примечания на случай, если кому-то интересно, я бы использовал mysqli, но версия базы данных моего веб-хостинга устарела. Они используют 5.2, я считаю.

Я забыл упомянуть, что проверил, чтобы убедиться, что база данных соответствует тому, что она получала, как видно на этих фотографиях (не может вставлять фотографии, поэтому ссылки):

https://drive.google.com/file/d/0B_u6weYp5wTCQng5eVhTSkZFRDg/view?usp=sharing
https://drive.google.com/file/d/0B_u6weYp5wTCQVRXTkNqdzhWUFE/view?usp=sharing

3

Решение

какова длина вашего поля пароля в базе данных ???

Мне кажется, что причина в том, что длина хешированного пароля слишком велика, и при сохранении в часть базы данных он или сбрасывается …

Тогда при сравнении вы получите 0 строк …

3

Другие решения

Хорошо, я хотел бы предложить использовать подготовленные операторы, отличные от библиотеки mysql. Это гораздо безопаснее и надежнее.

$query = "SELECT * FROM `users` WHERE AND `email`=:email_token";

Затем вы готовите и выполняете свой запрос

$data = $connection->prepare($query);
try {
$data->bindParam(":email_token",$_POST["email"],PDO::PARAM_STR);
$data->execute();
}
$result = $data->fetch(PDO::FETCH_ASSOC);
while($row = $result) {
$out = $row["password"];
}
if($out == $_POST["password"]) {
//loggin
} else {
//get lost
}

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

3

По вопросам рекламы [email protected]