PHP-объект, хранящийся в APC, сбрасывает ссылку на MySQL - PullRequest
0 голосов
/ 21 февраля 2012

Я не могу предоставить точный код, поэтому постараюсь проиллюстрировать проблему.Сначала у меня есть пара соединений с БД, которые подключаются и работают нормально ($ local, $ remote).Я передаю эти соединения в класс dbReader, сохраняю их в объекте и, наконец, сохраняю объект в APC:

class dbReader {

public $APC;
public $local;//Local DB
public $remote;//Remote DB

public function __construct($local,$remote){
    ePrint($IMX);
    $this->APC = new CacheAPC();//APC Object
    $this->local = $local;
    $this->remote = $remote;

    //Store dbreader in APC for reference:
    $this->storeDBReader();
}
public function getRunTypes(){
    //Query APC:
    $array = $this->APC->getData('RunTypes');
    //Populate APC:
    if(!$array){
        $array = array();
        $query = ...;

        $result = mysql_query($query,$this->remote);
        while($row =  mysql_fetch_array($result)){
            $array[$row['ID']] = $row['Val'];
        }
        $this->APC->setData('RunTypes',$array);
    }
    return $array;
}

public function storeDBReader(){
    //Store dbReader in APC for reference:
    $this->APC->setData('dbReader',$this);
}

}

Связь с подключением хороша на протяжении всего процессадо тех пор, пока я не восстановлю объект dbReader из APC и не попытаюсь вызвать функцию getRunTypes ().Я думаю, что когда объект хранится в APC, ссылки на MySQL уничтожаются.Это правда?Есть предложения?

1 Ответ

3 голосов
/ 22 февраля 2012

Нельзя сериализовать ресурс, а сохранение в APC автоматически сериализует объекты.

Это то, для чего предназначены магические методы __ sleep () и __ wakeup () : они в основном предсериализуются и публикуют несериализованные хуки, которые можно использовать для сброса и сброса подключение к базе данных при сохранении, а затем получить объект из APC.

...