【问题标题】:PHP Hashed Pwd Not Being Inserted to DatabasePHP Hashed Pwd 未插入数据库
【发布时间】:2017-05-08 02:08:50
【问题描述】:

我创建了一个简单的 php 脚本,它从我的 I-Phone 应用程序中获取用户名和密码的值。我确信它获取了正确的用户名和密码,因为它将正确的用户名和密码插入到数据库中。但是,当我尝试在插入数据库之前对密码进行哈希处理时,它失败了。

脚本如下。 $query 语句没有通过,我不知道为什么。 谢谢!

<?php
    @session_start();
    @ob_start();

    $host='localhost';
    $user='root';
    $pass='root';
    $db_name="deep_freeze"; 

    $connection = mysqli_connect($host,$user,$pass, $db_name);

    $username_p = $_POST['username'];
    $password_p = $_POST['password'];
    // Hash the password.  $hashedPassword will be a 60-character string.
    $hashPwd = mysql_real_escape_string(password_hash('hello', PASSWORD_DEFAULT));

    if(!$connection){
        die('Connection Failed');
    }
    else{
        $dbconnect = @mysqli_select_db($connection, $db_name);

        if(!$dbconnect){
            die('Could not connect to Database');
        }
        else{
            //echo $hashPwd;
            $query = "INSERT INTO deep_freeze VALUES ('$username_p','$hashPwd')";
            mysqli_query($connection, $query) or die(mysql_error());

            echo 'Successfully added.';
            echo $query;
            echo $username_p.$password_p;
        }
    }    
?> 

【问题讨论】:

  • 您正在使用 mysqli 进行连接,并使用 mysql_real_escape_string 转义字符串。
  • 不要混合使用 mysql_* 和 mysqli_* 函数。也不要使用 mysql_* 函数。
  • 数据库中密码的长度是多少?如果您的哈希长度为 100 个字符,并且在您的数据库中您已将字段设置为 varchar(80),则密码将被截断。另外,如上所述,只使用 mysqli_* 函数,而不是 mysql_*
  • 解决了,谢谢!!!
  • 问题是在我的数据库中,我将域设置为 varchar(20)。但是,哈希值超过 20 个字符。因此,它没有节省。我将密码域更改为 varchar(300) 并且有效

标签: php hash


【解决方案1】:

在您的代码中,您说哈希的长度是 60 个字符(根据 password_hash 方法),因此在您的数据库中,您必须将字段设置为至少 60 varchar(60) 的长度。

请注意,如果您的数据库字段长度小于 60,您的密码将在插入时被截断。

请参阅password_hash 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2017-04-08
    • 2014-04-04
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多