【问题标题】:Warning: couldn't fetch mysqli_result in ... using result set from $_SESSION警告:使用 $_SESSION 中的结果集无法在 ... 中获取 mysqli_result
【发布时间】:2013-11-14 13:44:24
【问题描述】:

当我尝试从结果中获取一行时出现此错误。这是产生错误的代码块。

            $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,我不知道这是否会影响它。

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

【问题讨论】:

    标签: php mysql ajax session


    【解决方案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>";
    }
    

    【讨论】:

    • $_SESSION['query'] = "SELECT * FROM table";,如果使用mysqli_query($_SESSION['query']);,它将运行
    • @DarylGill 天哪,真的吗?我敢打赌 mysqli_query() 需要连接对象等,它不能被序列化为会话并且仍然起作用?
    • @user2947268 是的,备用的[] 将在数组末尾追加一个新元素——这意味着它是一个很好的索引。
    • 如果不指定,链接将根据上次成功查询自动附加到查询中
    • 我在这一行收到此错误:$_SESSION['results'][] = $row;致命错误:不能使用 mysqli_result 类型的对象作为数组。尝试存储到会话中时,说我不能使用类型 mysqli_result。
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2023-03-15
    • 2021-05-19
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多