Page 1 sur 1

Problème de comptage de requêtes SQL

Posté : 13 nov. 2008, 22:52
par djtec
Bonsoir,

Voilà plus de 1 heure que j'essaye d'arranger ce problème mais rien n'y fait.

Donc j'aimerais compter le nombre total de requêtes SQL dans une page. En générale ca fonctionne mais quand je l'insère dans ma class SQL celà ne fonctionne plus celà m'affiche tout le temps 0 même s'il y a 1 requête.

Voici ma classe complète:
<?php

class Sql
{
	private $host;
	private $login_host;
	private $pass_host;
	private $hostname;
	
	public $num_queries = 0;
	
	

	public function __construct($host, $login_host, $pass_host, $hostname) 
	{ 
		$c = mysql_connect($host, $login_host, $pass_host) or die("Erreur de connexion au serveur SQL");
		mysql_select_db($hostname, $c) or die("Impossible de se connecter à la base de données");
				
		return $c;
	} 
	
	
				
	public function __destruct() 
	{	
		mysql_close();
	}
	
	
	
	public function getNumQueries()
	{
		return $this->num_queries;
	}	
	
	
	
	public function getSql($type_query, $string_query) 
	{	
		switch($type_query)
		{
			case 'query':
				$query = mysql_query($string_query);

				$this->num_queries++;

				return $query;
			break;

			case 'fetch_row':
				return mysql_fetch_row($string_query);
			break;
	
			case 'num_rows':
				return mysql_num_rows($string_query);
			break;

			case 'fetch_array':
				return mysql_fetch_array($string_query);
			break;

			case 'fetch_assoc':
				return mysql_fetch_assoc($string_query);
			break;
			
			default:
				return 'Erreur: aucun type de réquete sql déclaré.';
		}
	}


	// Fonction de génération des erreurs mysql
	public function getSqlError($table, $type, $line, $file, $sql, $message) 
	{	
		global $db;

		include('extension.inc');

		// Déclaration de la Class Template
		$tpl = new Template('./styles');

		$tpl->set_filenames(array(
    		'body' => 'error.'.$htmlEx
  		));
		
		$debug_text = '';
		$debug_text .= '<br /><br />Table: '.$table;
		$debug_text .= '<br /><br />Type: '.$type;
		$debug_text .= '<br /><br />Requete: '.$sql;
		$debug_text .= '<br /><br />Ligne : '.$line;
		$debug_text .= '<br /><br />Fichier: '.basename($file);
		$debug_text .= '<br /><br />Message d\'erreur MySql:<br />'.$message;

		$tpl->assign_vars(array(
			'TITLE' => 'SQL Error',
			'MESSAGE' => $debug_text
		));

		$tpl->pparse('body');

		$db->sql_close();
	
		exit;
	}
} 
?>
Et pour afficher le nombre de requêtes je fais:
echo $db->getNumQueries();
Merci d'avance...

Posté : 14 nov. 2008, 00:36
par Hywan
Hey :),

Est-ce que tu as essayé de débugger avec des var_dump() par exemple ? Dans la méthode getSql, places un var_dump($this->num_queries); avant et après l'incrémentation de ta variable et observe le résultat. Si rien n'est affiché, c'est que tu ne l'incrémentes jamais, sinon tu trouveras un autre problème.

Posté : 14 nov. 2008, 00:47
par djtec
Le var_dump m'affiche:

Code : Tout sélectionner

int(0) int(1)
Donc c'est qu'il incrémente bien apparament.

Là je ne vois pas du tout ce qui cloche...

Posté : 14 nov. 2008, 13:09
par Hywan
Est-ce qu'on peut voir un exemple de code d'utilisation s'il te plaît ?

Posté : 14 nov. 2008, 18:54
par djtec
Oui bien sûr, voilà comment j'utilise ma classe:
<?php

$db = new Sql($host, $login_host, $pass_host, $hostname);

$sql = "select * from ".TABLE_CATEGORY." order by cat_id desc";
$req = $db->getSql("query", $sql));
		
while($row = $db->getSql("fetch_array", $req))
{
	$tpl->assign_block_vars('catrow', array(
		'TITLE' => $row["cat_name"]
	));
}

?>
Et pour afficher le nombre de requêtes je fais:
echo $db->getNumQueries();
Bien sûr je place le nombre de requête après toutes mes requêtes SQL.

Posté : 14 nov. 2008, 19:01
par Hywan
T'es sûr de ne pas supprimer l'objet ou de créer une nouvelle instance ? Tu es sûr que c'est la même instance ? Affiche quelque chose dans le constructeur, tu seras fixé, car là, avec les infos qu'on a, je ne vois pas …

Posté : 14 nov. 2008, 19:55
par djtec
T'es sûr de ne pas supprimer l'objet ou de créer une nouvelle instance ?
Oui c'est sûr car je l'utilise comme je viens de te montré.
Tu es sûr que c'est la même instance ?
Là désolé mais je comprends pas.
Affiche quelque chose dans le constructeur, tu seras fixé, car là, avec les infos qu'on a, je ne vois pas …
Comment j'affiche quelque chose?
Je met un echo?

Posté : 15 nov. 2008, 02:56
par shine-neko
Fait un echo dans ta fonction qui récupérer le nombre de requête pour voir ?

Posté : 15 nov. 2008, 10:51
par djtec
Quand je fais un echo dans ma fonction __construct() il m'affiche: 0

Par contre quand je fais un var_dump($this->num_queries); dans ma fonction __destruct() il m'affiche: int(1)

Je comprend plus rien dans le __destruct() il m'affiche bien la réponse mais pas ailleur c'est un truc de fou ça.

J'ai beau chercher je vois pas l'erreur que j'aurais pu faire.

Posté : 15 nov. 2008, 20:24
par shine-neko
Je viens de tester ta class elle marche très bien, ça m'affiche bien le nombre de requête que j'ai fait :?

Posté : 15 nov. 2008, 21:24
par djtec
Pas chez moi donc ca veut dire que c'est dans mes pages qu'il y a quelque chose qui empeche l'affichage.

Bon ben merci je vais regader toutes mes pages et je vous tiendrais au courant.

Posté : 16 nov. 2008, 23:24
par djtec
J'ai trouvé mon erreur;

En faites j'inclue mon fichier footer.php pour éviter de modifier tout mes fichiers en cas de besoin et en faites je l'inclusais avant mes requêtes sql.

Quelle erreur con quand même.

Ben merci quand même.

++