无法 Fetch_Assoc() of Prepared Statement in PHP, 如果使用 Fetch num_rows 变为零

Unable to Fetch_Assoc() of Prepared Statement in PHP, If Fetch is Used num_rows becomes Zero

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'] 分配给会话变量。

你的第一个问题是你没有得到结果,我的意思是你错过了 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'] 覆盖第一个会话。