Расширение Memcache сериализует объекты перед отправкой их на сервер Memcached.Как упоминалось в другом постере, ресурсы нельзя сериализовать.Ресурс - это, в основном, ссылка на сетевое соединение с сервером базы данных.Вы не можете кэшировать сетевое соединение и использовать его позже.Вы можете кэшировать только те данные, которые передаются по соединению.
При таких запросах вы должны извлекать все строки перед их кэшированием.
$all_results = array();
while ($row = mysql_fetch_array($query)) {
$all_results[] = $row;
}
$memcache->set('query', $all_results);
Современные драйверы баз данных, такие как MySQLi и PDOесть функция fetch_all()
, которая будет извлекать все строки.Это немного упрощает ситуацию.
Когда вы получите этот массив позже, вы можете просто использовать foreach()
для его итерации.Это не работает с очень большими результатами запроса (Memcached имеет ограничение в 1 МБ), но в большинстве случаев у вас не должно быть проблем с ним.