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

时间:2013-11-03 22:59:43

标签: php mysql ajax 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,我不知道是否会影响它。

关于我可能做错什么的任何想法?

1 个答案:

答案 0 :(得分:1)

您无法在会话上运行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>";
}