2

是否可以将 mysql 资源提供给 $_SESSION 变量?

//mysqldb.inc.php
class mySqlDb
{
    private $link;

    public function __construct($_host = '', $_db = '', $_user = '', $_pwd = '')
    {
           $link = mysql_pconnect(...);
    }

    public function query($data)
    {
           $r = mysql_query($data, $this->link);
           return $r;
    }
}


//index.php
session_start();
include_once('mysqldb.inc.php');

$sqlobj = new mySqlDb();
$sqlobj->dbconnect($db_host, $db_name, $db_user, $db_pwd);
$_SESSION['mysqldb'] = $sqlobj;


//check.php
session_start();
include_once('mysqldb.inc.php');

$sqlobj = $_SESSION['mysqldb'];
$sqlobj->query(...);

$sqlobj->query(...)返回

致命错误:main():脚本试图执行方法或访问不完整对象的属性。请确保您尝试操作的对象的类定义“mySqlDb”在调用 unserialize()之前已加载或提供 __autoload() 函数以加载 D:\apache\www\check.php 中的类定义第 4 行`

如果我使用$_SESSION['mysqldb'] = serialize($sqlobj)并且$sqlobj = unserialize($_SESSION['mysqldb'])我有这个错误:

警告:mysql_query() 期望参数 2 是资源,在 D:\apache\www\mysqldb.inc.php 中给出的整数...

4

2 回答 2

4

你不能持久化 php 资源。

就是这样——你不能。所以每次都需要连接数据库。

$_SESSION文档说明:

因为会话数据是序列化的,所以资源变量不能存储在会话中。

于 2012-08-13T21:09:07.707 回答
1

你有这个:

$sqlobj = new mySqlDb();

但是你这样做:

$_SESSION['mysqldb'] = $sql;

即你正在设置$_SESSION['mysqldb']一个不存在的对象。试试$sqlobj吧。

于 2012-08-13T21:08:29.257 回答