我目前正在尝试使用password_hash()和password_verify()方法。
所以我要继续并创建一个小的登录/注册。
问题是每当我打开登录名时,输出为:
失败
我也不知道为什么。.我已经将数据库中密码字段的长度设置为255,但是仍然无法正常工作。
这是我的register.php :
<?php
require_once('db.php');
$username = mysqli_real_escape_string($db, $_GET['username']);
$password = mysqli_real_escape_string($db, $_GET['password']);
$p = password_hash($_GET['password'], PASSWORD_DEFAULT);
$stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?,?)");
$stmt->bind_param('ss', $username, $p);
$stmt->execute();
$stmt->close();
$db->close();
?>
我的登录名如下:
<?php
session_start();
error_reporting(0);
require_once('db.php');
function e($input) {
return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}
$username = mysqli_real_escape_string($db, $_GET['username']);
$password = mysqli_real_escape_string($db, $_GET['password']);
$stmt = $db->prepare("SELECT username, password FROM users WHERE username = ?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($username, $password);
$row = $stmt->fetch();
if (!empty($row)) {
if (password_verify($_GET['password'], $row['password'])) {
echo 'success';
}
else
{
echo 'failed';
}
}
else
{
echo "This user does not exist";
}
$stmt->close();
$db->close();
?>
我不知道该如何工作:/
答案 0 :(得分:5)
$stmt->fetch();
不返回数据。它将数据绑定到bind_result()
中定义的变量。
因此,在$stmt->fetch()
之后,您将在$username
中拥有用户名,并在$password
中拥有密码。
因此,真正应该比较的是:
if ($stmt->fetch()) {
// here
if (password_verify($_GET['password'], $password)) {
echo 'success';
}
else
{
echo 'failed';
}
}
else
{
echo "This user does not exist";
}