我正在尝试编写一个脚本来散列一些临时密码。现在,临时密码和散列版本存储在同一个表中。一旦我得到它们的哈希值,我就会放弃没有散列的列。 问题是:我的脚本正在设置所有哈希密码以匹配表中的最后一条记录。
$conn = new PDO("sqlsrv:Server=localhost;Database=database", "sqlUser", "password");
$result = $conn->prepare("SELECT tempPassword FROM employeeTable");
$result->execute();
$sql = "UPDATE employeeTable SET hashTempPass = :tempPass ";
while($data = $result->fetch(PDO::FETCH_ASSOC))
{
$tempPass = $data['tempPassword'];
$q = $conn->prepare($sql);
$q->bindValue(':tempPass', $tempPass);
$q->execute();
}
结果就是这样
user1 unhashPass1 hashpass3
user2 unhashPass2 hashpass3
user3 unhashpass3 hashpass3
而我需要的是
user1 unhashPass1 hashPass1
user2 unhashPass2 hashPass2
user3 unhashpass3 hashpass3
我希望这个问题足够明确。谢谢。
编辑:由于我在努力解决这个问题,我还没有哈希密码,直到我的代码正常运行。
答案 0 :(得分:2)
您已关闭,但您需要更改查询:
SELECT user, tempPassword FROM employeeTable
和
UPDATE employeeTable SET hashTempPass = :tempPass WHERE user = :user
这将允许您同时获取哈希和临时密码。
然后,您可以根据临时密码更新表格:
$conn = new PDO("sqlsrv:Server=localhost;Database=database", "sqlUser", "password");
$result = $conn->prepare("SELECT hash, tempPassword FROM employeeTable");
$result->execute();
//prepare it only once (no need to send query to server at each iteration
$sql = "UPDATE employeeTable SET hashTempPass = :tempPass WHERE user = :user";
$q = $conn->prepare($sql);
while($data = $result->fetch(PDO::FETCH_ASSOC))
{
$tempPass = $data['tempPassword'];
$user = $data['user'];
$q->bindValue(':tempPass', $tempPass);
$q->bindValue(':user', $user);
$q->execute();
}
注意强>
user
,但您需要调整该列
字段,以匹配您的表格。UPDATE
子句的WHERE
可能会让您遇到数据库管理员可能犯的最大错误。