【问题标题】:Updating MySQL database with MD5 value使用 MD5 值更新 MySQL 数据库
【发布时间】:2012-07-22 17:22:45
【问题描述】:

彻底搜索了我的代码后,我可以确定此错误的唯一原因是我用于将字符串转换为 MD5 的技术无效。但是我找不到其他方法。

$username = $_POST['username'];
$password = $_POST['password'];
$repassword = $_POST['repassword'];
if( $password=$repassword ) {
    $con=mysql_connect("localhost", "root", "");

    if( $con == true ) {
        mysql_select_db("movedb", $con);
        //$newpassword = mysql_real_escape_string(md5($_POST['password']));
        $query = "UPDATE user SET password=MD5('$password') WHERE username='$username'";
        // $query = "UPDATE user SET password='$newpassword' WHERE username='$username'";
        $result = mysql_query($query, $con);

        if( $result == true ) { 
            echo "Successfully saved your message";
        } else {
            echo mysql_error();
        }   

        mysql_close($con);
    } else {
            echo "Cannot connect to the database";
    }

} else {
    echo "Passwords do not match!";
}

关于如何从 PHP 更新此 MD5 值的任何想法

【问题讨论】:

  • 并修复那个 IF,你正在分配给它,你没有比较
  • 没有得到错误信息
  • @Yoosuf,如果没有错误,那么您需要告诉我们您对代码的期望,以及它是什么,没有交付什么。
  • 我希望密码在转换为哈希值后在数据库中得到更新。然而,即使在 PHPMyAdmin 中,SQL 似乎也没有给出任何结果
  • 不要使用 md5 等普通散列函数进行密码散列。使用 bcrypt 或类似结构。

标签: php mysql passwords md5


【解决方案1】:
$password = md5($password);
$query = "UPDATE user SET password='".$password."' WHERE username='".$username."'";

使用 PHP 支持的 md5 哈希。

【讨论】:

  • 不,它没有更新,也没有显示错误消息
  • 然后echo $query 放入phpmyadmin 中查看是否有username = $username 这样的入口。
  • 令人惊讶的是,PHP MyAdmin 说 0 行受到影响!更新用户 SET 密码='202cb962ac59075b964b07152d234b70' WHERE username='admin'
  • 你有 username='admin'
  • 当我将 SQL 脚本输入 MySQL 控制台时,它就可以工作了。但是,当我尝试从 PHP 再次登录时,它只接受旧密码!
【解决方案2】:

可能导致问题的一个问题是 MySQL 和 PHP 在加密时使用不同的默认盐。这意味着生成的字符串会有所不同。因此,您必须使用 PHP MySQL 来加密,而 而不是 两者的混合。

其次,MD5 已被其他更好的加密算法所取代。您可以考虑使用其中一种来提高安全性。查看 PHP 的 crypt() 函数。

【讨论】:

    【解决方案3】:

    检查密码:

    SELECT * FROM 'user' WHERE username='bob.jhonny' AND pass=MD5('oldPassword');

    更新:

    UPDATE 'dlp_contatcs'.'user' SET 'Pass'=MD5('NewPassword') WHERE 'Username'='bob.jhonny';

    【讨论】:

    • MD5(NewPassword) 来自我之前转换的一个
    【解决方案4】:

    警告:

    请不要使用mysql_* 函数来编写新代码。它们不再维护,社区已经开始deprecation process。看到red box

    相反,您应该了解prepared statements 并使用PDOMySQLiThis article 应该提供一些有关决定使用哪个 API 的详细信息。对于 PDO,这里是 good tutorial

    您可以使用 PHP 计算 md5() 哈希并将其存储到一个变量中,然后将该变量放入数据库中。只需确保在检查数据库时执行相同的转换(PHP 代码正文中的md5)。

    您应该修复if( $password=$repassword ) 行。您需要两个或三个= 标志来使if 检查某些内容。正确的行是if( $password === $repassword )

    // ...
    $newpassword = md5($_POST['password']);
    $result = mysql_query('UPDATE user SET password="' .mysql_real_escape_string($newpassword). '" WHERE username = "' .mysql_real_escape_string($username). '"', $con);
    
    if ( $result === TRUE )
    {
        echo "Successfully saved your message.";
    // ...
    

    【讨论】:

    • 是的,我也将检查最新版本的 PHP 编码。无论如何,您提供的代码片段也不起作用!没有显示错误消息,也没有在数据库中更新
    • @Yoosuf 请检查是否连接成功,user 表是否存在,username(您要更新的行中的password)也存在。
    • 是的,用户表存在,所以列用户名和记录管理员。
    • @Yoosuf 使用外部工具(如命令行中的phpMyAdmin 或mysql)执行查询是否成功修改行?
    • 不影响它仍然说 0 行受影响
    猜你喜欢
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多