PDOException: вы не можете сериализовать или десериализовать экземпляры PDO - PullRequest
8 голосов
/ 02 января 2012

Я пытался кэшировать свой объект User в PHP с помощью memcache, но я получаю сообщение об ошибке при использовании PDO. Я добавил функции __sleep и __wakeup.

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') возвращает объект pdo ...

Возвращает следующую ошибку:

PDOException: вы не можете сериализовать или десериализовать экземпляры PDO в /var/www/test/User.php в строке 41

1 Ответ

12 голосов
/ 02 января 2012

Вероятно, что $this->db является объектом PDO. Объекты PDO не могут быть сериализованы.

Удалите этот объект на __sleep() и добавьте его обратно на __wakeup() (это то, что вы уже делаете в последнем случае):

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

Нельзя сериализовать объекты, которые нельзя сериализовать. Но вы пытались, поэтому вы получили исключение. Это в основном вся проблема. Только не говорите PHP сериализовать объекты, которые нельзя сериализовать.

...