gpt4 book ai didi

php - 更新多行。 Mysql中的密码明文到密码哈希

转载 作者:行者123 更新时间:2023-11-30 22:11:26 27 4
gpt4 key购买 nike

我有一个包含多个用户的表。今天的用户是在平面文本密码。

现在,我使用 VARCHAR (256) 创建了一个新列,将每个用户的密码哈希放入名为 password 的列中。

我制作了一个获取每个用户的 PHP,并根据密码哈希进行更新:

<?php
require("Db.class.php");
require("password.php");
$db = new Db();
$result = $db->query("SELECT idUser, pass FROM user");

if(count($result) == 0){
echo "Error!";
$db->CloseConnection();
}

else if(count($result) > 0){
foreach($result as $user){
$passDB = $user["pass"];
$idUser = $user["idUser"];
$hash = password_hash($passDB, PASSWORD_BCRYPT);
$resultUser = $db->query("UPDATE user SET password = :hash WHERE idUser = :idUser",
array("hash" => $hash, "idUser" => $idUser));
}
$db->CloseConnection();
}
?>

PHP 适用于几行。然后,SQL 不会更新后续行,因为效率太低。

有没有更好的方法来做我想做的事?我必须将 php 与 mysql 混合使用,因为我必须使用库中的 password_hash 函数转换纯文本密码:password compat

最佳答案

在这种情况下,您可以使用 INSERT...ON DUPLICATE KEY UPDATE 在单个查询中执行此操作。 http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

下面的代码假定 isUser 是 PRIMARY KEY 或者是表中的 UNIQUE 列。

<?php
require("Db.class.php");
require("password.php");
$db = new Db();
$result = $db->query("SELECT idUser, pass FROM user");
if(count($result) == 0){
echo "Error!";
$db->CloseConnection();
}
else if(count($result) > 0){
$str="INSERT INTO user (idUser,pass,password) VALUES ";
foreach($result as $user){
$passDB = $user["pass"];
$idUser = $user["idUser"];
$hash = password_hash($passDB, PASSWORD_BCRYPT);
$str.="('".$idUser."','".$passDB."','".$hash."'),";
}
$str=rtrim($str,",");
$str.="ON DUPLICATE KEY UPDATE password=VALUES(password);";
$resultUser = $db->query($str);
$db->CloseConnection();
}
?>

关于php - 更新多行。 Mysql中的密码明文到密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40011147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com