无法使用PHP将passwordHash发送到MySQL表

问题描述 投票:0回答:1

我使用以下代码

$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()的返回是一个字符串。

php mysql password-hash
1个回答
2
投票

首先,正如我在评论中所说,你应该首先定义你的变量,然后准备/执行。你现在正在做什么可能会产生不利影响,所以这只是“良好做法”。

$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()而导致服务器上没有http://php.net/manual/en/function.password-hash.php,则需要使用密码兼容包,如手册中所示。

(PHP 5> = 5.5.0,PHP 7)

用户贡献说明:

PHP版本5.3.7及更高版本提供了兼容包,因此您无需等待5.5版即可使用此功能。它以单个php文件的形式出现:this comment

当我打字时,我注意到你的password_hash()

它运行在5.4,只是更新它使用5.5将看看这是否有帮助。我认为哈希应该正常工作,因为它会回显哈希?

完全是这样。 - PHP 5.4不支持使用http://php.net/manual/en/function.error-reporting.php。请参阅上面的密码兼容包。

还要确保密码列的长度足以容纳哈希值。手册建议255.如果小于60,则存在问题;太短了。

使用错误处理:(我在执行中略微编辑)。

© www.soinside.com 2019 - 2024. All rights reserved.