无法在$ _SESSION中存储数据库连接

时间:2011-12-11 21:57:15

标签: php mysql class session web

  

可能重复:
  Can't pass mysqli connection in session in php

我正在尝试将定制的PHP MySql类存储到$ _SESSION中。访问时,PHP会抛出一个错误:“脚本试图执行方法或访问不完整对象的属性......”。

include_once 'core/mysql.php';

    $conn = new mysql();
    $_SESSION['DBCONNECTION'] = new mysql();

    $result = $_SESSION['DBCONNECTION']->query_cust($sql);  // Fails!
    $result = $conn->query_cust($sql); // Works!

我只是想了解PHP中的Sessions如何工作以及将类定义为普通变量和$_SESSION中的变量之间的区别是什么!?

var_dump($_SESSION['DBCONNECTION'])返回:

object(__PHP_Incomplete_Class)[1]
  public '__PHP_Incomplete_Class_Name' => string 'mysql' (length=5)
  public 'con' => int 0

4 个答案:

答案 0 :(得分:6)

您无法在$_SESSION内存储资源处理。见PHP.net

  

某些类型的数据无法序列化,因此存储在会话中。它   包括资源变量或带有循环引用的对象(即   将引用传递给另一个对象的对象。)

由于您的对象包含连接链接,因此无法序列化。

答案 1 :(得分:2)

存储在会话中的任何内容都需要可序列化。为什么要将连接存储在会话中?这对我来说没有意义。只需重新连接每个请求。

答案 2 :(得分:0)

嗯,有几点需要评论

  1. 在Session中存储连接真是个坏主意

  2. 在会话中存储资源无论如何都不会起作用,AFAIK

  3. 对于内部机制,PHP将序列化对象以将其存储在会话中,并在后续请求中对其进行反序列化。你应该看看__sleep和__wakeup魔术方法

答案 3 :(得分:0)

当您序列化mysql类时,您可以轻松地将对象设置为$_SESSION.

相关问题