Невозможно выполнить Fetch_Assoc () подготовленного оператора в PHP, если используется извлечение, num_rows становится нулевым - PullRequest
0 голосов
/ 18 декабря 2018
public function Login($username, $pass){
    if(!empty($username) && !empty($pass)){
        $user = $this->link->prepare("SELECT username, pass FROM users WHERE username=? AND pass=?");
        $user->bind_param("ss", $username, $pass);
        $user->execute();

        $row=$user->fetch_assoc();

        If($user->num_rows==1){         
            session_start();
            $_SESSION['name']=$row['username'];
            $_SESSION['name']=true;
            header("Location: admin.php");                  
        }else{
            echo "Invalid Username and Password";   
        }   

    }else{
        echo "Empty Login Details";
    }
}

Тест для num_row = 0, потому что результат теперь находится в ассоциированном массиве. Когда я использовал Fetch(), num_rows было правильно, чтобы быть 1, но я не могу получить доступ к массиву, чтобы назначить $row['username']в переменную сеанса.

1 Ответ

0 голосов
/ 18 декабря 2018

Ваша первая проблема - вы не получаете результат, я имею в виду, что вы пропускаете mysqli_stmt :: get_result .

Ваш код должен быть

$user->bind_param("ss", $username, $pass);
$user->execute();
$result = $user->get_result();

if($result->num_rows === 1){
    $row = $result->fetch_assoc()
    $_SESSION['name']=$row['username'];
    header("Location: admin.php");
}else{
    echo "Invalid Username and Password";   
}  

Зачем выбирать, если строки не возвращаются правильно?

И здесь вы переопределяете сеанс

$_SESSION['name']=$row['username'];
$_SESSION['name']=true;

Последний сеанс $_SESSION['name'] перекрывает первый.

...