Problème avec la mise en cache des résultats SQL
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8211
- Loc: USA
- Status: Offline
Ok, j'ai la fonction suivante:
Vous voyez où il vérifie si elle est mise en cache? Au début pour voir si elle a besoin de retourner près de la fin où il vérifie si elle était nécessaire pour la mise en cache...
Quoi qu'il en soit, la fonction qui fait des caches est la suivante:
Le problème Im avoir, c'est quand j'essaie d'exécuter l'instruction SQL et être mise en cache eux, il met en cache les en entier. Je ne var_dump ($ results) et l'affiche int (1).
Je vérifie les fichiers du cache et ils disent i: 1;
Toute aide?
PHP Code: [ Select ]
public function fetch_rowset($sql, $type = 'assoc')
{
// Checking if the SQL query was cached
if($this->cache_results === true)
{
// The name of the cached file
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Checking if the SQL file exists
if(file_exists($sql_file))
{
return unserialize(file_get_contents($sql_file));
}
}
// Creating a result resource
$results = $this->set_result_resource($sql, true);
// Initiating the result array
$result = array();
// Checking what type of result we want
if($type == 'assoc')
{
while($row = mysql_fetch_assoc($results))
{
$result[] = $row;
}
}
elseif($type == 'array')
{
while($row = mysql_fetch_array($results))
{
$result[] = $row;
}
}
elseif($type == 'object')
{
while($row = mysql_fetch_object($results))
{
$result[] = $row;
}
}
elseif($type == 'row')
{
while($row = mysql_fetch_row($results))
{
$result[] = $row;
}
}
else
{
while($row = mysql_fetch_assoc($results))
{
$result[] = $row;
}
}
// Checking if we need to free the result resource
if($this->free_result == true)
{
$this->free_result();
}
// Checking if we need to cache the result
if($this->cache_results === true)
{
return $this->cache_results($sql, $result);
}
// Returning the result (if not cached)
return ($type == 'object') ? (object) $result : $result;
}
{
// Checking if the SQL query was cached
if($this->cache_results === true)
{
// The name of the cached file
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Checking if the SQL file exists
if(file_exists($sql_file))
{
return unserialize(file_get_contents($sql_file));
}
}
// Creating a result resource
$results = $this->set_result_resource($sql, true);
// Initiating the result array
$result = array();
// Checking what type of result we want
if($type == 'assoc')
{
while($row = mysql_fetch_assoc($results))
{
$result[] = $row;
}
}
elseif($type == 'array')
{
while($row = mysql_fetch_array($results))
{
$result[] = $row;
}
}
elseif($type == 'object')
{
while($row = mysql_fetch_object($results))
{
$result[] = $row;
}
}
elseif($type == 'row')
{
while($row = mysql_fetch_row($results))
{
$result[] = $row;
}
}
else
{
while($row = mysql_fetch_assoc($results))
{
$result[] = $row;
}
}
// Checking if we need to free the result resource
if($this->free_result == true)
{
$this->free_result();
}
// Checking if we need to cache the result
if($this->cache_results === true)
{
return $this->cache_results($sql, $result);
}
// Returning the result (if not cached)
return ($type == 'object') ? (object) $result : $result;
}
- public function fetch_rowset($sql, $type = 'assoc')
- {
- // Checking if the SQL query was cached
- if($this->cache_results === true)
- {
- // The name of the cached file
- $sql_file = $this->cache_dir . md5($sql) . '.cache';
- // Checking if the SQL file exists
- if(file_exists($sql_file))
- {
- return unserialize(file_get_contents($sql_file));
- }
- }
- // Creating a result resource
- $results = $this->set_result_resource($sql, true);
- // Initiating the result array
- $result = array();
- // Checking what type of result we want
- if($type == 'assoc')
- {
- while($row = mysql_fetch_assoc($results))
- {
- $result[] = $row;
- }
- }
- elseif($type == 'array')
- {
- while($row = mysql_fetch_array($results))
- {
- $result[] = $row;
- }
- }
- elseif($type == 'object')
- {
- while($row = mysql_fetch_object($results))
- {
- $result[] = $row;
- }
- }
- elseif($type == 'row')
- {
- while($row = mysql_fetch_row($results))
- {
- $result[] = $row;
- }
- }
- else
- {
- while($row = mysql_fetch_assoc($results))
- {
- $result[] = $row;
- }
- }
- // Checking if we need to free the result resource
- if($this->free_result == true)
- {
- $this->free_result();
- }
- // Checking if we need to cache the result
- if($this->cache_results === true)
- {
- return $this->cache_results($sql, $result);
- }
- // Returning the result (if not cached)
- return ($type == 'object') ? (object) $result : $result;
- }
Vous voyez où il vérifie si elle est mise en cache? Au début pour voir si elle a besoin de retourner près de la fin où il vérifie si elle était nécessaire pour la mise en cache...
Quoi qu'il en soit, la fonction qui fait des caches est la suivante:
PHP Code: [ Select ]
private function cache_results($sql, $results)
{
// Generating the file name for the cache
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Creating the cache file
if(touch($sql_file))
{
file_put_contents($sql_file, serialize($results));
}
return $results;
}
{
// Generating the file name for the cache
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Creating the cache file
if(touch($sql_file))
{
file_put_contents($sql_file, serialize($results));
}
return $results;
}
- private function cache_results($sql, $results)
- {
- // Generating the file name for the cache
- $sql_file = $this->cache_dir . md5($sql) . '.cache';
- // Creating the cache file
- if(touch($sql_file))
- {
- file_put_contents($sql_file, serialize($results));
- }
- return $results;
- }
Le problème Im avoir, c'est quand j'essaie d'exécuter l'instruction SQL et être mise en cache eux, il met en cache les en entier. Je ne var_dump ($ results) et l'affiche int (1).
Je vérifie les fichiers du cache et ils disent i: 1;
Toute aide?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
- Anonymous
- Bot


- Inscription: 25 Feb 2008
- Messages: ?
- Loc: Ozzuland
- Status: Online
Novembre 5th, 2010, 10:10 pm
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8211
- Loc: USA
- Status: Offline
Je n'ai pas encore pouvoir trouver une solution à ce problème pour le moment. Y at-il quelqu'un ici qui est capable de m'aider à résoudre ce problème.
La fonction a changé à ce qui suit:
La fonction a changé à ce qui suit:
PHP Code: [ Select ]
public function fetch_rowset($sql, $type = 'assoc')
{
// Checking if the SQL query was cached
if($this->cache_results === true)
{
// The name of the cached file
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Checking if the SQL file exists
if(file_exists($sql_file))
{
return unserialize(file_get_contents($sql_file));
}
}
// Creating a result resource
$results = $this->set_result_resource($sql, true);
// Checking what type of result we want
if($type == 'assoc')
{
while($row = mysql_fetch_assoc($results))
{
$result = $row;
}
}
elseif($type == 'array')
{
while($row = mysql_fetch_array($results))
{
$result = $row;
}
}
elseif($type == 'object')
{
while($row = mysql_fetch_object($results))
{
$result = $row;
}
}
elseif($type == 'row')
{
while($row = mysql_fetch_row($results))
{
$result = $row;
}
}
else
{
while($row = mysql_fetch_assoc($results))
{
$result = $row;
}
}
// Checking if we need to free the result resource
if($this->free_result == true)
{
$this->free_result();
}
// Checking if we need to cache the result
if($this->cache_results === true)
{
$this->cache_result($sql, $result);
}
// Returning the result (if not cached)
return ($type == 'object') ? (object) $result : $result;
}
{
// Checking if the SQL query was cached
if($this->cache_results === true)
{
// The name of the cached file
$sql_file = $this->cache_dir . md5($sql) . '.cache';
// Checking if the SQL file exists
if(file_exists($sql_file))
{
return unserialize(file_get_contents($sql_file));
}
}
// Creating a result resource
$results = $this->set_result_resource($sql, true);
// Checking what type of result we want
if($type == 'assoc')
{
while($row = mysql_fetch_assoc($results))
{
$result = $row;
}
}
elseif($type == 'array')
{
while($row = mysql_fetch_array($results))
{
$result = $row;
}
}
elseif($type == 'object')
{
while($row = mysql_fetch_object($results))
{
$result = $row;
}
}
elseif($type == 'row')
{
while($row = mysql_fetch_row($results))
{
$result = $row;
}
}
else
{
while($row = mysql_fetch_assoc($results))
{
$result = $row;
}
}
// Checking if we need to free the result resource
if($this->free_result == true)
{
$this->free_result();
}
// Checking if we need to cache the result
if($this->cache_results === true)
{
$this->cache_result($sql, $result);
}
// Returning the result (if not cached)
return ($type == 'object') ? (object) $result : $result;
}
- public function fetch_rowset($sql, $type = 'assoc')
- {
- // Checking if the SQL query was cached
- if($this->cache_results === true)
- {
- // The name of the cached file
- $sql_file = $this->cache_dir . md5($sql) . '.cache';
- // Checking if the SQL file exists
- if(file_exists($sql_file))
- {
- return unserialize(file_get_contents($sql_file));
- }
- }
- // Creating a result resource
- $results = $this->set_result_resource($sql, true);
- // Checking what type of result we want
- if($type == 'assoc')
- {
- while($row = mysql_fetch_assoc($results))
- {
- $result = $row;
- }
- }
- elseif($type == 'array')
- {
- while($row = mysql_fetch_array($results))
- {
- $result = $row;
- }
- }
- elseif($type == 'object')
- {
- while($row = mysql_fetch_object($results))
- {
- $result = $row;
- }
- }
- elseif($type == 'row')
- {
- while($row = mysql_fetch_row($results))
- {
- $result = $row;
- }
- }
- else
- {
- while($row = mysql_fetch_assoc($results))
- {
- $result = $row;
- }
- }
- // Checking if we need to free the result resource
- if($this->free_result == true)
- {
- $this->free_result();
- }
- // Checking if we need to cache the result
- if($this->cache_results === true)
- {
- $this->cache_result($sql, $result);
- }
- // Returning the result (if not cached)
- return ($type == 'object') ? (object) $result : $result;
- }
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8211
- Loc: USA
- Status: Offline
- joebert
- Sledgehammer


- Inscription: Fév 10, 2004
- Messages: 13455
- Loc: Florida
- Status: Offline
- Bogey
- Bogey


- Inscription: Juil 14, 2005
- Messages: 8211
- Loc: USA
- Status: Offline
joebert a écrit:
Heureux que vous ça a marché. Ive a regardé à ce fil d'un couple de fois se demander pourquoi le cache de requêtes MySQL n'a pas été assez cache. 
Le problème a été la manière dont j'ai été la mise en œuvre de la cache.
J'étais avec mon _get_ () qui appelle mysql_num_rows (), qui a ensuite, il met en cache. Puis il demande à mysql_fetch_row et il met en cache ainsi...le problème, c'est que le SQL est le même pour les deux requêtes.
Eh bien, ce n'était pas le problème, mais ils ont tous deux essayé d'écrire les résultats dans le fichier cache même.
Avec Ubuntu, dès qu'il crée le fichier écrit, ils sont automatiquement chmodded en lecture seule, donc mysql_fetch_row revenait int (1) depuis thats ce qui est dans le cache après mysql_num_rows.
J'ai ajouté _num le SQL qui met en cache mysql_num_row comme nom de fichier md5 ($ sql. "_num")
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
Page 1 sur 1
Pour répondre à ce sujet, vous devez vous connecter ou vous enregistrer. Il est gratuit.
Afficher de l'information
- Total des messages de ce sujet: 5 messages
- Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 95 invités
- Vous ne pouvez pas poster de nouveaux sujets
- Vous ne pouvez pas répondre aux sujets
- Vous ne pouvez pas éditer vos messages
- Vous ne pouvez pas supprimer vos messages
- Vous ne pouvez pas joindre des fichiers
