如何解决使用密码哈希更新当前密码
我正在尝试对数据库中的当前password_hash
值运行password
...
$mysqli->query("UPDATE users SET password = '" . password_hash('password',PASSWORD_DEFAULT) . "');
我没有收到任何错误,但是密码在更新后无法正常工作。我唯一能想到的是上面的查询没有从表中获取当前密码值。
不需要准备语句,因为我只是在本地为这个语句做事。
解决方法
您不能像这样混合使用PHP和SQL。 password_hash
是一个PHP函数。您需要将用户数据提取到PHP中,对其进行迭代,然后将每条记录保存到数据库中。这样做时使用SQL事务。
// Remember to always enable error reporting
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost','user','pass','test');
$mysqli->set_charset('utf8mb4'); // always set the charset
$users = $mysqli->query('SELECT Id,password FROM users');
// start transaction and prepare a statement
$mysqli->begin_transaction();
$stmt = $mysqli->prepare('UPDATE users SET `password`=? WHERE Id=?');
foreach ($users as $user) {
// make a hash out of the password
$hash = password_hash($user['password'],PASSWORD_DEFAULT);
$stmt->bind_param('ss',$hash,$user['Id']);
$stmt->execute();
}
// commit the data to DB and end transaction
$mysqli->commit();
始终使用准备好的语句。绝对没有任何理由不使用参数绑定!如果从一开始就使用参数绑定,您会更快地注意到您的方法存在缺陷。现在,您已将所有密码更改为字符串password
;每个帐户都有相同的密码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。