【发布时间】:2014-09-08 20:09:39
【问题描述】:
我正在尝试编写一个脚本来散列一些临时密码。目前临时密码和散列版本存储在同一个表中。一旦我将它们散列,我将删除未散列的列。 问题是:我的脚本正在设置所有散列密码以匹配表中的最后一条记录。
$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
我希望这个问题足够清楚。谢谢。
编辑:因为我一直在努力解决这个问题,我还没有散列密码,直到我让这段代码工作。
【问题讨论】:
-
为什么不使用
WHERE子句? -
Doh...错过了丢失的WHERE
-
我刚刚在 [ $sql ] 语句的末尾添加了 [ WHERE tempPassword = :tempPass"; ]。负面影响,代码已损坏。我确定我做错了。另外,应该while 循环在 try/catch 中?如果是,报告错误的最佳方法是什么?
-
您需要添加另一个子句
WHERE tempPassword = :tempPass AND user = :user类型的东西。至于错误,您可以在打开连接后立即添加$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,如果这是您所要求的错误,则可以添加error_reporting(E_ALL); ini_set('display_errors', 1);。
标签: php sql pdo sql-server-2012