Compter le nombre de requête SQL
Il arrive qu’on est envie de savoir combien on utilise de requête SQL dans notre code. Cette petite fonction existe pour ça.
<?php function compte_nombre_requete_sql($nombre_requete_sql = 0, $requete_sql = 'Initialisation du compteur', $array_requete_sql = array() ) { $array_requete_sql[] = $requete_sql; // On ajoute a l'array la nouvelle requête SQL $nombre_requete_sql = ($requete_sql == "Initialisation du compteur") ? 0 : $nombre_requete_sql+1; // On ajoute 1 seulement quand la variable $requete_sql ne vaut pas "Initialisation du compteur" return array( $nombre_requete_sql, $array_requete_sql); } ?>
Cette fonction prend plusieurs paramètres:
- Le premier: le nombre de requêtes SQL qui augmente de 1 à chaque fois qu'on appelle la fonction.
- Le second: la nouvelle requête SQL utilisée
- Le dernier: l'array qui contient toute les requêtes SQL utilisé.
Pour commencer a l'utiliser rien de plus simple, on n'a besoin d'aucun paramètre:
<?php $compte_nombre_requete_sql = compte_nombre_requete_sql(); ?>
A ce stade aucune requête SQL n'a été utilisé comme on peut le voir avec un petit var_dump():
array(2) { ["nombre_requete_sql"] => int(0) ["array_requete_sql"] => array(1) { [0]=> string(26) "Initialisation du compteur" } }
Pour commencer a compter le nombre de requête SQL on a juste a mettre cette ligne de code après après chaque requête SQL:
<?php $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $requete_sql, $compte_nombre_requete_sql["array_requete_sql"]); ?
La seule chose à modifier est la valeur de la variable $requete_sql, ça permet de savoir exactement quelle requête SQL on utilise.
Exemple:
<?php $requete_sql = 'SELECT * FROM `nom_video`'; $stmt = $bdd->query($requete_sql); $stmt->setFetchMode(PDO::FETCH_ASSOC); $langue = $stmt->fetchAll(); $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $requete_sql, $compte_nombre_requete_sql["array_requete_sql"]); // ---------- ---------- ---------- ---------- ---------- $requete_sql = 'SELECT * FROM `type_video`'; $stmt = $bdd->query($requete_sql); $stmt->setFetchMode(PDO::FETCH_ASSOC); $type_video = $stmt->fetchAll(); $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $requete_sql, $compte_nombre_requete_sql["array_requete_sql"]); ?>
Ce qui donne maintenant:
array(2) { ["nombre_requete_sql"] => int(2) ["array_requete_sql"] => array(3) { [0] => string(26) "Initialisation du compteur" [1] => string(25) "SELECT * FROM `nom_video`" [2] => string(26) "SELECT * FROM `type_video`" }
Comme on peut le voir, j'ai utilisé deux requêtes SQL.
Version 2:
Pour que ça soit plus complet, il est bien plus pratique de savoir d'ou sont exécuté les requêtes SQL. Voici donc la fonction modifié pour rajouter le lien vers l'emplacement du fichier d'ou on exécute la requête SQL et le numéro de ligne pour la retrouver facilement:
<?php function compte_nombre_requete_sql($nombre_requete_sql = 0, $donnees_requete_sql = array('requete_sql' => 'Initialisation du compteur'), $array_requete_sql = array() ) { $array_requete_sql[] = $donnees_requete_sql; // On ajoute a l'array la nouvelle requête SQL... $nombre_requete_sql = ($donnees_requete_sql['requete_sql'] == "Initialisation du compteur") ? 0 : $nombre_requete_sql+1; // On ajoute 1 seulement quand la variable $donnees_requete_sql['requete_sql'] ne vaut pas "Initialisation du compteur" return array( "nombre_requete_sql" => $nombre_requete_sql, "array_requete_sql" => $array_requete_sql); } ?>
On doit mettre maintenant ce code après la requête SQL:
<?php $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $donnees_requete_sql = array('requete_sql' => $requete_sql, 'ligne' => __LINE__, 'fichier' => __FILE__), $compte_nombre_requete_sql["array_requete_sql"]); ?>
Exemple:
<?php $requete_sql = 'SELECT * FROM `type_video`'; $stmt = $bdd->query($requete_sql); $stmt->setFetchMode(PDO::FETCH_ASSOC); $type_video = $stmt->fetchAll(); $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $donnees_requete_sql = array('requete_sql' => $requete_sql, 'ligne' => __LINE__, 'fichier' => __FILE__), $compte_nombre_requete_sql["array_requete_sql"]); // ---------- ---------- ---------- ---------- ---------- $requete_sql = 'SELECT * FROM `nom_video`'; $stmt = $bdd->query($requete_sql); $stmt->setFetchMode(PDO::FETCH_ASSOC); $type_video = $stmt->fetchAll(); $compte_nombre_requete_sql = compte_nombre_requete_sql($compte_nombre_requete_sql["nombre_requete_sql"], $donnees_requete_sql = array('requete_sql' => $requete_sql, 'ligne' => __LINE__, 'fichier' => __FILE__), $compte_nombre_requete_sql["array_requete_sql"]); ?>
Un nouveau petit var_dump():
array(2) { ["nombre_requete_sql"] => int(2) ["array_requete_sql"] => array(3) { [0]=> array(1) { ["requete_sql"] => string(26) "Initialisation du compteur" } [1]=> array(3) { ["requete_sql"] => string(26) "SELECT * FROM `type_video`" ["ligne"] => int(26) ["fichier"] => string(74) "/var/www//****/test/index.php" } [2]=> array(3) { ["requete_sql"] => string(25) "SELECT * FROM `nom_video`" ["ligne"] => int(35) ["fichier"] => string(74) "/var/www/****/test/index.php" } } }
Tous les codes sont testés et sont fonctionnels, si il arrive qu'un de ces codes ne fonctionne pas chez vous, merci de me le signaler.