gpt4 book ai didi

php - SQL Server PDO UPDATE 循环错误

转载 作者:搜寻专家 更新时间:2023-10-31 21:09:02 24 4
gpt4 key购买 nike

我正在尝试编写一个脚本来散列一些临时密码。目前,临时密码和散列版本存储在同一个表中。一旦我对它们进行哈希处理,我将删除未哈希处理的列。 问题是:我的脚本正在设置所有散列密码以匹配表中的最后一条记录。

$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

我希望这个问题足够清楚。谢谢。

编辑:因为我一直在努力解决这个问题,我还没有散列密码,直到我让这段代码工作。

最佳答案

你很接近,但你需要更改查询:

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 但您需要调整该列字段当然要与您的表格相匹配。
  • 没有 WHERE 子句的
  • UPDATE 可能会让您犯下数据库管理员可能犯的最大错误。

关于php - SQL Server PDO UPDATE 循环错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732363/

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