Comment faire un systeme de cache sur les requêtes en utilisant PDO?
Posté : 06 août 2015, 16:28
Bonjour,
J'ai le besoin d'insérer un system de cache pour certaine de mes requêtes mysql. Ma methode actuel ne fonctionne pas du tout, car en utilisant le PDO, il m'est impossible de serialize() les resultat des requêtes. J'ai essayer d'autre methode alternative tel que json_encode et autres. Rien n'y fait! Je vous montres ou j'en suis... et dite moi si vous avez une solution pour moi!
Voici ou j'en suis rendu :
Vous avez des idées pour moi?
Merci d'avance!
J'ai le besoin d'insérer un system de cache pour certaine de mes requêtes mysql. Ma methode actuel ne fonctionne pas du tout, car en utilisant le PDO, il m'est impossible de serialize() les resultat des requêtes. J'ai essayer d'autre methode alternative tel que json_encode et autres. Rien n'y fait! Je vous montres ou j'en suis... et dite moi si vous avez une solution pour moi!
Voici ou j'en suis rendu :
Code : Tout sélectionner
function query($query,$cache=false,$time=1) {
$cache_dir = ROOT_PATH.'cache/';
$cache_filename = md5($query);
if($cache) {
if(file_exists($cache_dir.$cache_filename)) {
if(filemtime($cache_dir.$cache_filename) > (time() - 60 * 60 * $time)) {
echo 'Loading cache<br>';
$return = file_get_contents($cache_dir.$cache_filename);
}
}
}
if (!isset($return) && empty($return)) {
if(self::$Connect == true) {
try{
if( $q = self::$Connect->prepare($query) ) {
$result = $q->execute();
if(!$result) return false;
else file_put_contents($cache_dir.$cache_filename, $q);
}
return $q;
} catch(Exception $e) {
//print_r(debug_backtrace());
error_log("database.error > #".$e->getCode().' > '.$e->getMessage());
die('<br />Error : '.$e->getMessage().'<br />N° : '.$e->getCode());
}
} else {
error_log("database.error.query > connection to database lost");
die('<br />Error : The connection to the database was lost.');
}
} else {
echo 'Return cache<br>';
return $return;
}
}
Merci d'avance!