警告:无法获取mysqli_result..使用从 $_SESSION 起的结果集


Warning: couldn't fetch mysqli_result in ... using result set from $_SESSION

当我尝试从结果中获取一行时,我收到此错误。下面是产生错误的代码块。

            $count = 0;
            @ session_start();
            $result = $_SESSION['results'];
            $str = "";
            while(($row = mysqli_fetch_array($result)) && $count<= 15){
                //do something;
                $count++;
           }

下面是进行查询并将结果存储到会话中的代码块。

$mysql = new MySQLInterface();
$result = $mysql->run_query($query);
       if($result === false){
            //echo "result is boolean and false";
       }else{
            $count = 0;
            while(($row = mysqli_fetch_array($result)) && $count<= 15){
                //do stuff
                $count++;
            }
           @ session_start();
           $_SESSION['results'] = $result;
       }

在此测试用例中,从初始结果返回 18 行。在第一次使用结果时,我使用了 18 行中的 16 行,然后将其存储到会话中。稍后,我从会话中提取结果并尝试获取剩余的 2 行,这就是抛出错误的时候。

在会话中存储结果是否会导致此错误?还是在存储结果后尝试拉行时需要执行其他操作?我在尝试第二次访问结果时也使用 AJAX,我不知道这是否会影响它。

关于我可能做错了什么有什么想法吗?

您不能在会话上运行 MYSQLI 命令。即使您可以将$result对象"存储"到会话中,当您这样做时,它也会被序列化,这意味着它保留信息,但不会保留整套函数等。

您可以通过循环访问结果,将它们放入数组中,然后将数组存储在会话中来实现类似的效果。然后,您可以使用foreachfor循环轻松循环访问结果。

session_start();
$result = $mysql->run_query($query);
if($result === false)
{
    //echo "result is boolean and false";
}
else
{
    while($row = mysqli_fetch_array($result))
    {
        $_SESSION['results'][] = $row;
    }
}

然后显示数据:

$myStart=0;
for($i=$myStart;$i<$myStart+15;$i++)
{
    echo $row['index_you_want']."<br>";
}