Php 更新多个行。Mysql中密码明文到密码哈希的转换
我有一个有多个用户的表。如今,用户使用的是平面文本密码 现在,我用Php 更新多个行。Mysql中密码明文到密码哈希的转换,php,mysql,hash,Php,Mysql,Hash,我有一个有多个用户的表。如今,用户使用的是平面文本密码 现在,我用VARCHAR(256)创建了一个新列,将每个用户的密码散列放入名为password的列中 我制作了一个PHP,用于获取每个用户,并根据密码哈希进行更新: <?php require("Db.class.php"); require("password.php"); $db = new Db(); $result = $db->query("SELECT idUser, pass FROM user"); if(co
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\u散列函数转换纯文本密码:在这种情况下,您可以使用INSERT…ON DUPLICATE KEY UPDATE在单个查询中执行此操作。 下面的代码假定isUser是主键或表中唯一的列
<?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();
}
?>
在这种情况下,您可以使用INSERT…ON DUPLICATE KEY UPDATE在单个查询中执行此操作。
下面的代码假定isUser是主键或表中唯一的列
<?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();
}
?>
关于您的查询的
$resultUser = $db->query("UPDATE user SET password = PASSWORD(:hash)
WHERE idUser = :idUser",
参考这里
那么您就不需要在php上进行转换并再次传递
或者,如果您不想重新执行数组
$resultUser = $db->query("UPDATE user SET password = PASSWORD('".$hash."')
WHERE idUser = '".$idUser."'",
关于你的问题
$resultUser = $db->query("UPDATE user SET password = PASSWORD(:hash)
WHERE idUser = :idUser",
参考这里
那么您就不需要在php上进行转换并再次传递
或者,如果您不想重新执行数组
$resultUser = $db->query("UPDATE user SET password = PASSWORD('".$hash."')
WHERE idUser = '".$idUser."'",
你还面临什么问题?如果你能告诉我细节,也许我能帮上忙。明天我会在你的帮助下用另一种方式试试。然后我会回答你。谢谢你还面临什么问题?如果你能告诉我细节,也许我能帮上忙。明天我会在你的帮助下用另一种方式试试。然后我会回答你。谢谢