<?php
/**
* Compteur de requêtes.
*
* Classe étendue de PDO destinée à compter le nombre de requêtes envoyées.
*/
class SQL extends PDO
{
/**
*Définition des constantes pour la méthodes getnbrQuery
*
*/
const SUM=1;
const PREPARED=2;
const DIRECT=3;
const BOTH=4;
/**
* initialisation d'une variable de comptage
*
* @var Int
*/
static $nbrQuery = 0;
/**
* initialisation d'une variable de comptage
*
* @var Int
*/
static $nbrPreparedQuery = 0;
/**
* redéfinition des méthodes de PDO.
* Chaque méthode utilisant une requête SQL incrémentera le compteur.
*
* @todo faire de même avec les autres fonctions qui effectuent des requêtes.
*/
/**
*Méthode de contruction
*
*
*/
public function __construct($dsn, $user, $pass, $options=NULL){
try{
parent::__construct($dsn, $user, $pass, $options);
// Activation du mode de gestion des erreurs par levée d'exception
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e){
throw $e;
}
}
/**
* Redéfinition de la methode parent::query()
*/
public function query($q)
{
try{
self::$nbrQuery+=1;
return parent::query($q);
}catch(PDOException $e){
throw $e;
}
}
/**
*Redéfinition de la méthode parent::exec()
*/
public function exec($q)
{
try{
self::$nbrQuery+=1;
return parent::exec($q);
}catch (PDOException $e){
throw $e;
}
}
/**
*Redéfinition de la méthode parent::execute()
*/
public function execute($opt=NULL){
try{
self::$nbrPreparedQuery+=1;
return parent::execute($opt);
}catch (PDOException $e){
throw $e;
}
}
/**
* Récupération du nombre de requêtes.
*
* @return Int/Array
*/
public function getnbrQuery($opt=SUM)
{
switch ($opt) {
case SUM:
$retour=self::$nbrQuery+self::$nbrPreparedQuery;
break;
case PREPARED:
$retour=self::$nbrPreparedQuery;
break;
case DIRECT:
$retour=self::$nbrQuery;
break;
case BOTH:
$retour=array('DirectQuery'=>self::$nbrQuery,'PreparedQuery'=>self::$nbrPreparedQuery);
break;
}
return $retour;
}
}
$user='xxx';
$pass='xxx';
try{
$connec=new SQL('mysql:host=xxx;dbname=xxx', $user, $pass);
} catch (PDOException $e) {
die("Erreur de connection: <br />".$e->getMessage());
}
$sql='SELECT * FROM `table`';
try{
$resQrySel = $connec->query($sql);
} catch (PDOException $e){
die("Erreur d'éxécution de la requête:<br />".$sql."<br />Erreur:<br />".$e->getMessage());
}
if($i == 0){
try{
$res = $resQrySel->fetchAll(PDO::FETCH_OBJ);
} catch (PDOException $e){
die("Erreur lors du traitement de la ressource: <br />".$e->getMessage());
}
foreach($res as $a=>$b){
echo "<br />Enregistrement numéro ".$a."<br />";
foreach($b as $cle=>$valeur){
echo $cle." = ".$valeur."<br />";
}
}
}
$sql='SELECT * FROM `table` WHERE `champ` = ?';
try{
$var=$connec->prepare($sql);
$var->execute(array(5));
$res=$var->fetchAll();
}catch(PDOException $e){
die('Erreur d\'éxécution de la requête préparée: '.$e->getMessage());
}
print_r($re);
echo 'Nombre de requêtes effectuées: '.$connec->getnbrQuery();
?>
Bon dans le principe, je pense être bon, seulement, ça ne me compte pas ma requête préparée dans l'exemple....?
Pas cette fois, si ça avais été le cas je te l'aurais indiqué comme pour PDOException, je t'ai précisé quelle est (comme tu dis - "dérivée") de Exception.Bon je pense avoir un petit peu compris, en fait PDOStatement et dérivé de PDO, c'est bon là?