[PHP/MySQL] compter nombre requetes SQL ?

compter nombre requetes SQL ? [PHP/MySQL] - PHP - Programmation

Marsh Posté le 10-12-2006 à 23:13:39    

Bonjour,
 
J'ai un site hébergé sur Free. Parfois à certaines heures de la journée il rame, voire ca met "internal server error". Il faut alors rafraichir pour espérer avoir la page completement chargée.
 
Du coup j'aimerais compter le nombre de requetes SQL à la BDD pour chaque page pour par exemple l'afficher en bas de page, dans le footer. Je pourrais parcourir toutes mes pages et chercher à chaque fois la fonction mysql_query et créer une variable et l'incrémenter apres chaque requete. Mais bon pas très astucieux  :sweat:  
 
Y a-t-il un moyen de compter le nombre de requetes? une fonction PHP qui fait ca, ou autre?
 
Merci pour votre aide  :jap:

Reply

Marsh Posté le 10-12-2006 à 23:13:39   

Reply

Marsh Posté le 11-12-2006 à 17:07:13    

up?

Reply

Marsh Posté le 11-12-2006 à 17:51:54    

Ben c'est à ma connaissance le seul moyen de procéder :/
 
le plus simple est bien sûr d'appeler une fonction personnalisée "do_query" (par exemple, quand on n'a pas de classe d'abstraction DB) dans laquelle tu incrémentes ta variable avant de retourner le résultat de ta requête, ça t'évites de récrire tes scripts à chaque mise à jour de l'appli ;)

Reply

Marsh Posté le 11-12-2006 à 21:55:17    

c'est l'idée que j'avais en tete avant de poster ce topic, mais bon j'espérais une fonction toute faite  :D.
Mais bon je viens de coder cette solution et ca a été bien simple finalement  [:aztechxx]
 
merci pour ton info  [:amel_the_white]


---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 11-12-2006 à 21:59:28    

Si tu utilises une couche d'abstraction de la base de données (classe pour gérer les requetes mysql), il est très facile de compter les requêtes SQL puisque toutes passent par les méthodes de la classe.
Il te suffit ensuite de créer une classe 'Logger' par exemple, qui se charge d'incrementer un attribut compteur à chaque appel de la méthode pour faire une requête SQL.
Les choses sont faciles quand le code est bien conçu. :D
 
L'exemple que j'ai donné est celui que j'ai utilisé dans mon script Freeglobes, jette un coup d'oeil au code source si jamais tu veux avoir un exemple de comment faire. ;)

Reply

Marsh Posté le 12-12-2006 à 00:56:08    

merci bien je pense avoir à peu près compris la logique  :jap:


---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 12-12-2006 à 01:45:38    

un probleme arrive rarement seul  :pfff:
Après avoir codé ma petite fonction "requete_sql", je me trouve confronté à un nouveau probleme: les requetes sql ne sont plus échappées correctement.

 

Voici le code de ma fonction:

Code :
  1. function requete_sql($requete)
  2. {
  3.       //----incrémente le nombre de requetes SQL
  4.      
  5.     global $nbr_requetes_sql;
  6.    
  7.     if(!isset($nbr_requetes_sql))
  8.       $nbr_requetes_sql= 1;
  9.     else
  10.       $nbr_requetes_sql++;
  11.      
  12.    
  13.       //----retourne résultat requete
  14.      
  15.     $req_fonction_requete= mysql_query($requete) or die(mysql_error());
  16.     return ($req_fonction_requete);
  17. }
 

Avant j'avais ma requete du style: (ost: original soundtrack, au passage pour comprendre, au cas où)

Code :
  1. $ost= "select * from ost where nom='$nom_ost' ";
  2. $req_ost= mysql_query($ost) or die(mysql_error());
 

En appliquant ma fonction "requete_sql", j'obtiens donc:

Code :
  1. $req_ost= requete_sql($ost);
 

Ca marche nikel, sauf quand le $nom_ost contient des caractères spéciaux du genre quotes simples. Apparemment avant, c'est comme si le mysql_query échappait automatiquement juste ce qu'il fallait. Je crois que ce qui était exécuté était:

Code :
  1. "select * from ost where nom='j\'aime la vie' ";
 

Avec ma fonction, le mysql_query ne semble pas échapper l'apostrophe du "j'aime". Pourtant la requete reste la meme, la fonction ne fait qu'ajouter une étape de plus  [:airforceone]. Si je veux échapper avec une fonction php, ca échappe tout. Donc je suis un peu dos au mur  :sweat:

 

Avez-vous une idée de comment je peux résoudre ça? je ne vois vraiment pas là, à part peut-être modifier mes requetes SQL, ce qui est le dernier de mes recours.

 

Je suis désolé de vous solliciter tant :/. Merci pour votre aide.


Message édité par welcominh le 12-12-2006 à 02:12:49

---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 12-12-2006 à 03:25:34    

Je t'arrête tout de suite, c'est quoi ce vilain global qui pue :o
 
En quoi tu as besoin d'avoir accès à cette valeur depuis n'importe où :??:
 
Crées une petite classe pour la gestion du sgbd, utilises une variable statique et fais une fonction qui renvoit la valeur :)
 
Ou simplement une fonction sans classe qui compte, mais le global bof.

Reply

Marsh Posté le 12-12-2006 à 10:13:10    

J'utilise le global pour pouvoir utiliser la variable dans mon footer (afficher le nombre de requetes sql qu'a dû utiliser la page pour être générée).
Je pourrais le mettre en valeur de retour, mais il y a déjà le résultat de ma requete en retour. Si tu as une idée pour pouvoir utiliser ma variable de partout sans la mettre en valeur de retour, je suis preneur :)

 

PS: toujours bloqué pour ma fonction requete_sql()  :pfff:
edit: ah bah je viens de me rendre compte que ca marchait même pas avant sans la fonction. Bon bah je crois que je vais échapper le $nom_ost directement. Finalement, après avoir échappé le $nom_ost, ca marche


Message édité par welcominh le 12-12-2006 à 10:59:35

---------------
Direct-download.com, le moteur de recherche pour Mega
Reply

Marsh Posté le 14-12-2006 à 01:54:36    

Tu utilises de belles fonctions propres comme j'ai proposé ;)
 
Petite piste, puisqu'en php tu peux pas faire de procédure, tu peux choisir la valeur de retour en fonction des paramètres en entrée ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed