2012-01-02 16 views
8

Tôi đã cố gắng để cache đối tượng người dùng của tôi trong PHP với memcache, nhưng tôi nhận được một lỗi trong khi sử dụng PDO. Tôi đã thêm một __sleep và một hàm __wakeup.PDOException: Bạn không thể tuần tự hóa hoặc unserialize PDO trường hợp

user.php

/** 
* @var PDO 
*/ 
protected $db; 

public function __construct() 
{ 
    $this->db = getInstanceOf('db'); 
} 

public function __destruct() 
{ 

} 

public function __sleep() 
{ 
    return array('db'); 
} 

public function __wakeup() 
{ 
    $this->db = getInstanceOf('db'); 
} 

getInstanceOf ('db') trả về một đối tượng PDO ...

Trả về lỗi sau:

PDOException: You cannot serialize or unserialize PDO instances in /var/www/test/User.php on line 41

Trả lời

11

Có khả năng là $this->db là một Đối tượng PDO. Các đối tượng PDO không thể được tuần tự hóa.

Di chuyển đối tượng đó trên __sleep() và thêm nó lại __wakeup() (đó là những gì bạn đã làm trong trường hợp sau):

public function __sleep() 
{ 
    return array(); 
} 

Bạn không thể serialize đối tượng mà không thể được đăng. Nhưng bạn đã thử, vì vậy bạn có ngoại lệ. Đó là cơ bản toàn bộ vấn đề. Chỉ cần không nói với PHP để tuần tự hóa các đối tượng không thể được tuần tự hóa.

+0

Cảm ơn bạn rất nhiều;) nó hoạt động hoàn hảo ... – MaxiNet

Các vấn đề liên quan