无法使用php将passwordhash发送到mysql表

r6hnlfcb  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(440)

我正在使用以下代码

$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时,数据库不会更新。有什么额外的事情我需要做,使哈希适合插入?在php文档中,password\u hash()返回的是一个字符串。

qfe3c7zg

qfe3c7zg1#

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

$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
(PHP5>=5.5.0,PHP7)
用户贡献说明:
php版本5.3.7及更高版本有一个兼容包,因此您不必等待版本5.5才能使用此函数。它以单个php文件的形式出现:https://github.com/ircmaxell/password_compat
当我打这个的时候,我注意到你的评论:
它是在5.4上运行的,刚刚更新为使用5.5,看看这是否有帮助。我认为散列应该像回显散列一样工作?
完全是这样。- password_hash() 无法在PHP5.4上使用。请参阅上面关于密码兼容包的内容。
还要确保password列的长度足以容纳散列。手册建议255。如果小于60,就有问题;太短了。
使用错误处理:(我在执行时稍微编辑了一下)。
http://php.net/manual/en/function.error-reporting.php (可能会引发一个关于该函数不可用的错误)。
http://php.net/manual/en/mysqli.error.php

相关问题