我是MySQL的新手,有一个简单的问题:
我正在构建一个用户需要登录网站的页面,当他们登录时我想检查:
到目前为止,我有以下内容应该涵盖第一部分,但我不知道如何引用我从db中选择的密码,以便我可以设置if / else然后进行比较即可。
有人可以帮我这个吗? 此外,如果有更好的方法来解决这个问题,请告诉我。
我的SQL:
$conn = new mysqli($dbServer, $dbUser, $dbPass, $dbName);
$conn->set_charset("utf8");
if($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);
$stmt = $conn->prepare("SELECT email, pw FROM Users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
if(mysqli_num_rows($result) = 0){
echo "Email has not been registered yet";
}else{
if(
// compare pw with $pw
}
}
$conn->close();
非常感谢提前。
答案 0 :(得分:1)
试试这个:
$conn = new mysqli($dbServer, $dbUser, $dbPass, $dbName);
$conn->set_charset("utf8");
if($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$pw = password_hash($_POST["pw"], PASSWORD_BCRYPT);
$stmt = $conn->prepare("SELECT email, pw FROM Users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
if(mysqli_num_rows($result) = 0){
echo "Email has not been registered yet";
}else{
if($pw===$result['pw']){
//password matched
}
else { //password wrong
}
}
}
$conn->close();
答案 1 :(得分:1)
mysqli_result类实例中的$result
var,请使用它的方法fetch_assoc()
(如Michael Berkowski所说)通过键获取关联数组'电子邮件& #39;根据你的sql,并且' pw'然后,您可以使用password_verify($pass, $hash) -> bool
轻松检查您的密码是否与数据库中的哈希相匹配,正如其他答案已经说过的那样。