成功验证数据库中存在用户名后,我还需要验证密码是否匹配。因此,我需要从数据库中检索哈希密码,对吧?或者我还有其他选择吗?
我正在使用 PHP 5.5 API bcrypt 进行哈希处理。当我从数据库中获取密码时,我的代码会给我一个 500 内部服务器错误。我该如何正确地做到这一点?
这是我的 PHP 代码:
// If found username, check password, else respond invalid username
if($countRows!==0){
// Get hash from database
// Prepare statement
$stmt = $conn->prepare('SELECT password FROM users WHERE username = ?');
// Bind
$stmt->bind_param('s', $ps_username);
// Set Parameters
$ps_username = $username;
// Execute
$hash = $stmt->execute();
// Check password
if (!password_verify($password, $hash)) {
if($error != ""){
$error .= '<br>';
}
$error .= 'The user or password you entered do not match, please try again.';
}
else {
echo 'OK';
// Session start
// Redirect user to profile/homepage
}
}
有人可以推荐一些我可以学习 SQL 命令的东西吗?我找不到合适的地方。
最佳答案
execute()不返回任何列数据。它返回一个 bool 值(真/假)。这是您的代码块首先失败的地方:
$hash = $stmt->execute();
您可以在此处查看有关如何从结果集中获取数据的示例:http://php.net/manual/en/mysqli-stmt.fetch.php
一个例子是:
$stmt->execute();
$stmt->bind_result($hash);
$stmt->fetch();
回应:
And can someone recommend something that I can learn SQL commands?
这对于 Stackoverflow 来说几乎是题外话,但是 mysqli 的 PHP 手册可以通过大量示例向您展示如何很好地使用 mysqli API。如果您想学习结构化查询语言本身,可以使用大量外部资源,包括 MySQL 的文档。
关于php - MySQL php get column using another column(使用用户名获取密码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35496668/