加密密码列表

| 我有一个充满用户的数据库,这些用户为使用该代码生成了密码:
UPDATE users SET password = SUBSTRING(MD5(RAND()) FROM 1 FOR 8)
我仅用用户的电子邮件/密码制作了另一个表格以供快速参考 现在,我想对主用户表上的密码进行加密。我尝试使用以下代码进行此操作,但无法正常工作。它出什么问题了?
$query = \"SELECT * FROM usersreference\";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    $password = $row[\'password\'];
    $email = $row[\'email\'];
    $encrypted_password = md5($password);
}

$query = \'UPDATE users SET password = \"\' . $encrypted_password . \'\" WHERE email = \"\' . $email . \'\"\';
$result = mysql_query($query);

if (mysql_affected_rows() == 1) {
    header(\'Location: index.php?page=Admin\');
} else {
    die(\"there was a problem\");
}
mysql_close();
    
已邀请:
您可以使用SQL加密所有密码:
UPDATE users SET `password` = MD5(`password`)
顺便说一句,您的PHP代码中的SQL查询不起作用,因为ѭ3是MySQL中的保留字,因此您需要对它进行反引号引用。     
第一:“不起作用”没有帮助。您应该确定什么不起作用。您应该为自己定义希望在程序的每个点看到的东西以及实际获得的东西。然后,您可以确定这两件事在哪里。 问题1:您遍历选择查询的所有用户,但仅将最后一个保存到变量中。另外,如果您的选择不返回任何行,那么您将使用未初始化的变量执行更新。 问题2:您的表有一个名为\“ password \”的列。这是mysql的保留关键字。您可以使用该名称,但是应该这样引用它:
... SET `password` = ...
它可以不带引号但为什么要冒险... 除此之外,您的更新查询看起来正确。如果它没有更新任何内容,则应测试使用mysql命令行或类似phpmyadmin的管理工具运行它。     
其他人已经给出了解决方案。但是您的代码似乎也是错误的。您仅更新最后一个结果。您应该将更新查询放入while循环中:
$query = \"SELECT * FROM usersreference\";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    $password = $row[\'password\'];
    $email = $row[\'email\'];
    $encrypted_password = md5($password);

    $updatequery = \'UPDATE users SET password = \"\' . $encrypted_password . \'\" WHERE email = \"\' . $email . \'\"\';
    $updateresult = mysql_query($updatequery);
    ...
}
    

要回复问题请先登录注册