代码之家  ›  专栏  ›  技术社区  ›  user2771279

使用PHP SESSION变量存储MySQL查询结果[重复]

  •  2
  • user2771279  · 技术社区  · 11 年前

    我希望在一个文件中执行查询,将其存储在会话变量中,并在另一个文件访问结果。

    文件1.php:

    //This is the file I have executed my sql statement in
    //I have already done session_start(); and initialized $conn
    $query = //my query. I know it is working because I have tested it elsewhere, so I 
             // don't believe it is the problem
    $_SESSION['query2'] = mysqli_query($conn, $query)
    

    文件2.php:

    //This is the file I want to access my query results in.
    //I have already done session_start(); and initialized $conn
    
    $tempArray =  $_SESSION['query2'];
    
    if (isset($tempArray)) {
        $row = mysqli_fetch_array($tempArray, MYSQL_NUM);
        if ($row == null) {
            echo "<h1> error </h1>"; //This line gets executed
        } else {
            echo "<h1> works! </h1>";
        }
    } else {
        echo "<h1> array not set </h1>";
    }
    

    你知道我做错了什么吗?或者,有没有另一种方法来完成我在这里试图做的事情?

    2 回复  |  直到 11 年前
        1
  •  2
  •   Steve    11 年前

    在会话中存储实际阵列:

    File1.php:
    
    $query = //my query. 
    $result = array();
    $res = mysqli_query($conn, $query);
    while($row = mysqli_fetch_array($res, MYSQL_NUM){
        $result[] = $row;
    }
    $_SESSION['query2'] = $result;
    
    File2.php:
    //I have already done session_start(); and initialized $conn
    
    $tempArray =  $_SESSION['query2'];
    var_dump($tempArray);
    
        2
  •  2
  •   Luis Masuelli    11 年前

    你有两个问题:

    1. 尝试存储一个类实例就像他们告诉你的那样(记住,类应该实现 __sleep() __wakeup() 因此,您可以选择如何序列化对象-将在序列化中包含哪些成员,以及在反序列化时如何重新初始化其他成员-还要记住,对象的类 必须 当你 unserualiza 这样的对象)。
    2. 尤其是试图存储myqsli对象。这些对象包含 对可收集资源的引用 ,因此,即使您成功地序列化了此类对象,它们的内部引用也可能不再有效。

    如前所述,您的最终解决方案是获取行并将其保持在会话中。如果您不想保留这些行(您告诉过只有一行,但也许您不想急于获取),请保留一个数组,其中包含要定义的数据和 绑定 再次执行查询。