【发布时间】: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) 并且有效