Подготовленный оператор возвращает ошибки номер 0 - PullRequest
0 голосов
/ 27 мая 2019

Проблема: Я настраиваю свою систему входа в систему, которая должна позволять пользователю использовать либо имя пользователя, либо пароль для входа.Однако мой оператор prepare возвращает Prepare failed: (0) в консоль (0 - это номер ошибки mysql).

Что я пробовал: Я пытался заглянуть в руководство MySQL, чтобы увидеть, что Error Number 0 есть, но ничего не удалось найти.

<?php
include "../includes/config.php";
if($_SERVER["REQUEST_METHOD"] == "POST") {
        // Can be either the email or username 
    $login = $_POST['login'];
    $password = $_POST['password'];

    if ( $login != "" && $password != "" ) {
        // Prepare the statement
        $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");
        // Check Prepare
        if ( !$pullLogin->prepare() ) { echo "<script>console.log('Prepare failed: ($pullLogin->errno) $pullLogin->error');</script>"; }
        // Bind the parameters to the statement
        $pullLogin->bind_param( "ss", $login, $login );
        // Execute it :-)
        $pullLogin->execute();
        // Store the results, I don't really knwo why but whatever
        $pullLogin->store_result();
        // Bind the password to a variable :-)
        $pullLogin->bind_result($correctPassword);
        // Free the results
        $pullLogin->free_results();
        // Close the statement
        $pullLogin->close();



        // This is hashed and I'm only echoing it to see if ^ works
        echo $correctPassword;


    }
}
?>

Ожидается: пользователь может использовать для входа либо свое имя пользователя, либо адрес электронной почты.
Фактические результаты: оператор подготовки не работает: /

1 Ответ

1 голос
/ 27 мая 2019

Вы дважды вызываете prepare ().

Вы выполняете пустой оператор в условии if при вызове prepare () без аргумента ... поэтому ничего не нужно делать, а также нет ошибки (ошибка номер 0) но результат от этого вызова является ложным.просто проверьте результат первого подготовительного вызова.

Измените второй подготовительный вызов:

if ( $login != "" && $password != "" ) {
  // Prepare the statement
  $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");
  // Check Prepare
  if ( !$pullLogin->prepare() ) { echo "<script>console.log('Prepare failed: ($pullLogin->errno) $pullLogin->error');</script>"; }

Таким образом, вы проверяете только результат первого подготовительного вызова ():

if ( $login != "" && $password != "" ) {
  // Prepare the statement
  $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");
  // Check Prepare
  if ( !$pullLogin ) { echo "<script>console.log('Prepare failed: ($link->errno) $link->error');</script>"; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...