【问题标题】:PHP Session + MySQL resourcePHP Session + MySQL 资源
【发布时间】:2012-08-13 21:05:55
【问题描述】:

是否可以将 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 中给出的整数 ...

【问题讨论】:

  • 我不明白为什么不这样做。但是为什么你呢?
  • 另外,它可能无助于回答您的问题,但您应该停止使用mysql_* 函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定要使用哪一个,read this article.

标签: php mysql


【解决方案1】:

你不能持久化 php 资源。

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

$_SESSION documentation 备注:

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

【讨论】:

  • 好的,我只连接一次,缓存数据直到有效。
【解决方案2】:

你有这个:

$sqlobj = new mySqlDb();

但是你这样做:

$_SESSION['mysqldb'] = $sql;

即您将 $_SESSION['mysqldb'] 设置为不存在的对象。请改用$sqlobj

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2015-02-08
    • 2014-01-28
    • 2010-12-29
    相关资源
    最近更新 更多