Проблема с использованием mysqli_stmt_bind_result - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь использовать 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 Ответ

0 голосов
/ 07 ноября 2018

Вы связываете результаты с помощью mysqli_stmt_bind_result(), и это переменные, которые будут содержать значения после получения результатов.

Ваша fetch() функция возвращает логическое значение, а не результат (в отличие от неподготовленных запросов).

if (mysqli_stmt_fetch($stmt)) {
     $message = $email_Users;
     echo "<script type='text/javascript'>alert('$message');</script>";
     $pwdCheck = password_verify($pass, $pass_word);

То же самое относится к любому месту, которое вы пытаетесь использовать $row - вы должны использовать переменные, которые назначены в mysqli_stmt_bind_result() (поэтому $id_Users вместо $row['idUsers'], $first_NameUsers вместо $row['firstNameUsers'] и скоро).

См. Документацию для каждого метода для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...