在会话中存储 mysqli_query 结果

store mysqli_query result in session

我想将 MySQLi 查询的结果存储为会话变量,这样我就可以重用它而无需再次执行查询。我不想在我网站的每个页面或每次刷新页面时都执行相同的查询。

我已经尝试了下面的代码,但出现了 "object can not be stored in session" 和 "mysqli_fetch_array expects parameter one to be a resource".

之类的错误

如何在会话中存储查询结果?

session_start();

if (!isset($_SESSION['query_result'])) {
    $anything=mysqli_query($connection,"select something from table name 
        where filed1='$variable' order by id desc limit 70");
    $_SESSION['query_result']=$anything;
} else {
    $anything= $_SESSION['query_result'];
}

while ($data=mysqli_fetch_array($anything)) {
    /* output the data */
}

试试这个:

  if(!isset($_SESSION['query_result'])){
     $anything=mysqli_query($connection,"select something from table name where filed1='$variable' order by id DESC limit 70");
     while($res = mysqli_fetch_row($anything)){
        array_push($_SESSION['query_result'], $res);
     }
  } else {
     $anything = $_SESSION['query_result'];
  }
while($data=mysqli_fetch_array($anything)){
   print_r($data);
}

如果您不仅要为一个客户端存储数据,还要为服务器端存储数据,我建议您查看 how to build a in-memory server side cache in php?。有些框架已经内置了这个。

否则使用 mysqli API 方法之一,如 http://php.net/manual/de/mysqli-result.fetch-assoc.php,这应该 return 你是一个数组而不是对象。

mysqli_query() returns 一个你不能存储到会话中的对象(有一种方法可以将对象转换为数组,但我不建议你存储整个对象) http://php.net/manual/de/function.get-object-vars.php

这样使用:

$result = $connection->query("select something from table");
$_SESSION['session-name'] = $result->fetch_assoc();

$sql = `select something from table`;
$result = mysqli_query($sql);
$_SESSION['session name'] = mysqli_fetch_assoc($result);