2012-08-13 73 views
2

是否有可能将mysql资源赋予$ _SESSION变量?PHP会话+ MySQL资源

//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(...)回报

Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "mySqlDb" of the object you are trying to operate on was loaded before unserialize() gets called or provide a __autoload() function to load the class definition in D:\apache\www\check.php on line 4`

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

Warning: mysql_query() expects parameter 2 to be resource, integer given in D:\apache\www\mysqldb.inc.php on line ...

+0

我不明白为什么不。但是,为什么*你会? – Matt 2012-08-13 21:08:17

+2

此外,它可能不会帮助回答你的问题,但你应该停止使用'mysql_ *'函数。他们正在被弃用。请使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不确定使用哪一个,[阅读本文](http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/)。 – Matt 2012-08-13 21:08:34

+0

感谢您的建议马特。 – JEdot 2012-08-13 21:10:18

回答

4

您无法坚持php资源。

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

+0

好的,我只会连接一次并缓存数据直到它们有效。 – JEdot 2012-08-13 21:26:08

1

你有这样的:

$sqlobj = new mySqlDb(); 

但随后你这样做:

$_SESSION['mysqldb'] = $sql; 

I.e.您将$_SESSION['mysqldb']设置为不存在的对象。改为尝试$sqlobj

+0

排字错误 - 已编辑。 – JEdot 2012-08-13 21:13:13