Php 在包含50000条记录的表的所有行上更新特定字段

Php 在包含50000条记录的表的所有行上更新特定字段,php,mysql,Php,Mysql,我有一个表,其中保存了我的用户信息,如用户名、密码、姓名、家庭等。当用户在我的站点注册时,她的密码用一个md5()函数散列,然后插入到表中。我的桌子现在大约有50000张唱片。 但是现在我想再次使用两个md5()函数来散列他们的密码,以解决安全问题。为此,我编写了以下代码,首先选择所有用户,然后执行更新查询以更改密码: $allMembers = mysql_query("select `username`,`password` from `members`",$conn); if (m

我有一个表,其中保存了我的用户信息,如用户名、密码、姓名、家庭等。当用户在我的站点注册时,她的密码用一个md5()函数散列,然后插入到表中。我的桌子现在大约有50000张唱片。 但是现在我想再次使用两个md5()函数来散列他们的密码,以解决安全问题。为此,我编写了以下代码,首先选择所有用户,然后执行更新查询以更改密码:

$allMembers =   mysql_query("select `username`,`password` from `members`",$conn);


if (mysql_num_rows($allMembers) > 0){

    while($row  =   mysql_fetch_array($allMembers)){

            $oldPass    =   $row['password'];

            $newPass    =   md5(md5('Hello'.$oldPass.'Friends'));

            mysql_query("update `members` set `password`='$newPass' where `username`='".$row['username']."'",$conn);
    }
}

echo("Yes");
但是,当我运行这段代码时,只需很少的时间,就不会产生任何数据接收消息。 但是现在我如何更新我的大表中的密码字段呢


编辑:我使用了salt+md5,但在我的代码中删除了它以进行摘要:)

只需将其作为单个查询运行即可:

UPDATE `members` SET `password`=MD5(MD5(`password`))

顺便说一句,双MD5是无用的。如果您想要更好的安全性,可以使用MD5+salt或SHA1+salt。

“再次使用两个MD5()函数解决安全问题。”。。。世界跆拳道联盟!不要沿着这条路走。阅读有关密码加密以提高密码的安全性,而不是多次散列(这通常会降低密码的安全性)。您是否检查了select query是否返回任何内容?这将使这些密码的md5增加三倍,因为您正在运行
md5(md5($password\u md5\u hash))
。不管怎么说,MD5本来就是要快速的,你知道这是一个真正难以破解的密码算法。你有什么更好的建议吗?正如马克所说,运行两个哈希值根本没有帮助。首先选择一个更好的散列算法,然后在密码上撒盐。我自己也没说得更好。md5()php函数和md5()mysql函数之间有什么区别吗?@Ahmad-使用php生成的md5散列和使用mysql生成的md5散列没有什么区别,但为了安全起见,请不要这样做。当你在它的时候,MySQL已经过时了,考虑MyQuLi或PDO,而不是数据库访问。