【发布时间】:2015-09-15 11:01:36
【问题描述】:
尝试从数据库验证哈希密码,用户通过 POST 输入。经过一些简短的研究,似乎这个问题可能与无法将 mysqli_query 转换为字符串有关,尽管我不知道如何正确地做到这一点,因此我从另一个 SO 问题中添加了 fetch_object() 等。我还充分考虑了设置为 varchar(255) 的列的长度。感谢任何帮助或指导,谢谢。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$password = $_POST['password'];
$db_password = mysqli_query($conn, 'SELECT password FROM sec')->fetch_object()->password;
if (password_verify($password, $db_password)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
【问题讨论】:
-
@martinstoeckli 哦,天哪,你是对的,我在想别的东西。对不起,我会删除 cmets,以免混淆 OP。
-
假设每个用户都有自己的密码,那么您的 SQL 语句似乎是错误的:
SELECT password FROM sec这会从表 sec 中搜索所有密码。相反,您可能想要搜索给定的用户,如下所示:SELECT password FROM sec WHERE username = ?。 -
无论如何,尽管如此,如果你能转储你的
$db_password,那还是很好的。如果该查询甚至可以正常工作,您可能会收到结果数组/obj,而不是单个字符串。 -
@masteryupa - 那么你做了
var_dump($db_password)和var_dump($password)吗?它们是否具有正确的数据类型和正确的长度并且没有任何空格? -
@masteryupa - 我会看看存储过程,也许那里添加了空白?最好不要在数据库中。