Problème de comptage de requêtes SQL

Eléphant du PHP | 451 Messages

13 nov. 2008, 22:52

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...

ViPHP
ViPHP | 4674 Messages

14 nov. 2008, 00:36

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 451 Messages

14 nov. 2008, 00:47

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...

ViPHP
ViPHP | 4674 Messages

14 nov. 2008, 13:09

Est-ce qu'on peut voir un exemple de code d'utilisation s'il te plaît ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 451 Messages

14 nov. 2008, 18:54

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.

ViPHP
ViPHP | 4674 Messages

14 nov. 2008, 19:01

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 …
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 451 Messages

14 nov. 2008, 19:55

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?

Eléphanteau du PHP | 15 Messages

15 nov. 2008, 02:56

Fait un echo dans ta fonction qui récupérer le nombre de requête pour voir ?

Eléphant du PHP | 451 Messages

15 nov. 2008, 10:51

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.

Eléphanteau du PHP | 15 Messages

15 nov. 2008, 20:24

Je viens de tester ta class elle marche très bien, ça m'affiche bien le nombre de requête que j'ai fait :?

Eléphant du PHP | 451 Messages

15 nov. 2008, 21:24

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.

Eléphant du PHP | 451 Messages

16 nov. 2008, 23:24

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.

++