Не удается отправить passwordHash в таблицу MySQL с PHP - PullRequest
0 голосов
/ 16 сентября 2018

Я использую следующий код

$q = $connection->prepare("INSERT INTO users (firstName, lastName, email, passwordHash) VALUES (?,?,?,?)");

$q->bind_param('ssss', $firstName, $lastName, $email, $passwordHash);

$firstName = trim($_POST['firstName']); 
$lastName = trim($_POST['lastName']); 
$email = trim($_POST['email']); 
//$passwordHash = '$2y$10$Q0Z2OTSOjLqXA3XWscvDxO70GfY0LdQrJ/oUfxty4APU763D0iuJW'; 
$passwordHash = password_hash($_POST['password'], PASSWORD_DEFAULT); 
echo $passwordHash;
$q->execute();
$q->close();

Когда я использую закомментированную строку, оператор выполняется и таблица обновляется.Когда я использую PasswordHash, который не закомментирован, база данных не обновляется.Есть ли что-то еще, что мне нужно сделать, чтобы хеш подходил для INSERT?Из документов PHP возвращение password_hash () представляет собой строку.

1 Ответ

0 голосов
/ 16 сентября 2018

Во-первых, как я уже говорил в комментариях, вы должны сначала определить свои переменные, а затем подготовить / выполнить.То, что вы делаете сейчас, может иметь неблагоприятные последствия, поэтому это просто «хорошая практика».

$firstName = trim($_POST['firstName']); 
$lastName = trim($_POST['lastName']); 
$email = trim($_POST['email']); 
//$passwordHash = '$2y$10$Q0Z2OTSOjLqXA3XWscvDxO70GfY0LdQrJ/oUfxty4APU763D0iuJW'; 
$passwordHash = password_hash($_POST['password'], PASSWORD_DEFAULT); 
echo $passwordHash;

$q = $connection->prepare("INSERT INTO users (firstName, lastName, email, passwordHash) VALUES (?,?,?,?)");

$q->bind_param('ssss', $firstName, $lastName, $email, $passwordHash);


if($q->execute()){
   echo "Success!";
} else {
   echo "Error: ". mysqli_error($connection);
}
$q->close();

Примечание: Если password_hash() недоступно наВаш сервер из-за версии, которая не поддерживает его, вам нужно будет использовать для него пакет совместимости паролей, как показано в руководстве к нему.

(PHP 5> = 5.5.0, PHP 7)

Примечание от пользователя:

Для версий PHP 5.3 доступен пакет совместимости.7 и более поздних, поэтому вам не нужно ждать версии 5.5 для использования этой функции.Он поставляется в виде одного php-файла: https://github.com/ircmaxell/password_compat

Когда я набирал это, я заметил этот комментарий от вас:

он работал на 5.4, просто обновил его, чтобы использовать 5.5, посмотрим, поможет ли этоЯ думаю, что хеширование должно работать так, как оно отображает хеш?

Вот и все. - password_hash() недоступно для использования в PHP 5.4.См. Выше о пакете совместимости паролей.

Также убедитесь, что длина столбца пароля достаточно велика для хранения хэша.Руководство предлагает 255. Если это меньше 60, есть проблема;это слишком коротко.

Использовать обработку ошибок: (которую я включил в небольшое редактирование вашего исполнения).

...