我想用 mysqli_stmt_bind_result()
但我觉得我用得不对。下面的代码获取用户名和密码,并在数据库中运行一个查询,如果匹配,则意味着返回成功。
但是,当我打印出行时,它是空的。我可能做错了什么?
我不打算使用 mysqli_stmt_get_result()
我知道这是怎么回事。我想利用 mysqli_stmt_bind_result
在这种情况下。
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
require 'dbh.inc.php';
$email = $_POST['email'];
$pass = $_POST['pass'];
if (empty($email) || empty($pass)) {
header("Location: ../login.php?error=emptyfields");
exit();
}
else {
$sql = "SELECT idUsers, emailUsers, firstNameUsers, lastNameUsers, pwdUsers, bdayUsers FROM users WHERE emailUsers = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
echo 'errorme';
exit();
}
else {
mysqli_stmt_bind_param($stmt ,"s", $email);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $id_Users ,$email_Users, $first_NameUsers, $last_NameUsers, $pass_word, $bday_Users);
if ($row=mysqli_stmt_fetch($stmt)) {
$message = $row["$email"];
echo "<script type='text/javascript'>alert('$message');</script>";
$pwdCheck = password_verify($pass, $row['pwdUsers']);
if ($pwdCheck == false) {
echo 'wrongpass';
exit();
}
else if($pwdCheck == true) {
session_start();
$_SESSION['userId'] = $row['idUsers'];
$_SESSION['userName'] = $row['firstNameUsers'];
echo 'success';
exit();
}
else {
echo 'noresults';
exit();
}
}
else {
echo 'nouser';
exit();
}
}
}
}
else {
header("Location: ../login.php");
exit();
}
?>
1条答案
按热度按时间pkmbmrz71#
你把结果通过
mysqli_stmt_bind_result()
,这些变量将在获取结果后保存这些值。你的
fetch()
函数返回布尔值,而不是结果(与未准备的查询不同)。这同样适用于你尝试使用的任何地方
$row
-必须使用中指定的变量mysqli_stmt_bind_result()
(所以$id_Users
而不是$row['idUsers']
,$first_NameUsers
而不是$row['firstNameUsers']
以此类推)。有关详细信息,请参阅每个方法的文档。
mysqli_stmt::bind_result()
mysqli_stmt::fetch()