Я пытаюсь кэшировать результаты запроса, который не изменится очень часто, если вообще. В моем классе у меня есть собственная переменная класса private $_cache
и в моем конструкторе я инициализировать его так, как я с большинством из моего кэширования:Кэширование объекта PDOStatement в Zend Framework
// Setup caching
$frontendOptions = array('lifeTime' => (strtotime('+1 week') - time()));
$backendOptions = array('cache_dir' => '../application/cache');
$this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
Позже, в функции Я пытаюсь кэшировать результаты запроса, в:
$cache_id = 'all_station_results';
if (($results = $this->_cache->load($cache_id)) === false)
{
// Get all data from stations table
$sql="SELECT * FROM locations";
$sth = $this->_db->query($sql);
// Serialize query results
$data = serialize($sth);
// Write to cache
$this->_cache->save($data, $cache_id);
}
else
{
// Return results from cache
return unserialize($results);
}
Это бросает исключение:
Вы не можете сериализовать или десериализации экземпляры PDOStatement
Так что я попытался без сериализации и я получаю это исключение брошенное:
Данные должны быть строкой или установить automatic_serialization = истину
Теперь, очевидно, PDOStatement не является строка, и я не» см. разницу между установкой automatic_serialization = true
и ручной сериализацией.
Как я могу кэшировать этот объект PDOStatement?
Я не думаю, что вы можете сериализовать объекты PDO. Почему бы не кэшировать массив, содержащий результаты? –
Что именно вы хотите кэшировать? Если результаты запроса не будут очень большими, рассмотрите кеширование результатов вместо утверждения. –
Это определенно возможность, но надеялась, что вы сможете изменить любые местоположения в моем коде, где выполняется этот запрос, и вместо этого вызвать функцию, которая возвращает PDOStatement, как если бы я вызвал запрос '$ this -> _ db-> ($ sql) но повышает эффективность кэширования. Таким образом, код, который следует за запросами, не должен меняться, потому что он будет работать на PDOStatement и не будет знать разницу. –