如果使用Fetch,则无法获取PHP中已准备语句的\u Assoc(),num\u行变为零

如果使用Fetch,则无法获取PHP中已准备语句的\u Assoc(),num\u行变为零,php,prepared-statement,Php,Prepared Statement,测试num_row=0,因为结果现在在关联数组中, 当我使用Fetch()时,num_rows正确为1,但我无法访问数组以将$row['username']分配给会话变量。您的第一个问题是没有得到结果,我的意思是您丢失了 你的代码应该是 public function Login($username, $pass){ if(!empty($username) && !empty($pass)){ $user = $this->link->pre

测试
num_row=0
,因为结果现在在关联数组中,
当我使用
Fetch()
时,
num_rows
正确为1,但我无法访问数组以将
$row['username']
分配给会话变量。

您的第一个问题是没有得到结果,我的意思是您丢失了

你的代码应该是

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";
    }
}
如果没有正确返回行,为什么要提取

您正在覆盖这里的会话

$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";   
}  

最后一个会话
$\u会话['name']
正在覆盖第一个会话。

只需移动
$row=$user->fetch_assoc()$user->num_rows
进行测试后,将code>放入if块注意,如果您已经拥有数据,那么向mysqli询问数据计数是没有意义的,只需测试/计数您已经拥有的数据@尼克:我已经移动了$row=$user->fetch_assoc();在if块中,testcount$user->num_rows==1仍然是False@Fjay您是否尝试过打印
$user->num\u行的值
?也许它大于1…@Nick,是的,值是0而不是1。应该是一条评论,但没问题。谢谢,第二个会话被删除了,问题是$user->num_rows==1 persistHey@Fjay一个新的答案正在等着你。@Saral,非常感谢,它成功了!!
$_SESSION['name']=$row['username'];
$_SESSION['name']=true;