2012-10-12 44 views
6

Estoy buscando específicamente extender el objeto PDO de alguna manera para agregar un contador interno cada vez que se ejecuta una consulta. Quiero hacer esto de una manera en la que no tendría que cambiar ninguna de mis consultas existentes ni agregar una función adicional like this suggests.Recuento Número de consultas Cada carga de página con PDO

No estoy familiarizado con las clases o la clase PDO en particular, pero ¿podría hacerse? ¿Cómo voy a hacer esto?

Estoy pensando extender query y execute e incrementar una variable almacenada cada vez que se llaman.

Respuesta

7

Extender PDO se haría como cualquier otra clase. ¿Esto se adaptaría a tus necesidades? El único otro cambio de código sería crear una instancia de esta clase en lugar de la clase PDO al hacer la conexión inicial.

class PDOEx extends PDO 
{ 
    private $queryCount = 0; 

    public function query($query) 
    { 
    // Increment the counter. 
     ++$this->queryCount; 

    // Run the query. 
     return parent::query($query); 
    } 

    public function exec($statement) 
    { 
    // Increment the counter. 
     ++$this->queryCount; 

    // Execute the statement. 
     return parent::exec($statement); 
    } 

    public function GetCount() 
    { 
     return $this->queryCount; 
    } 
} 
+1

¡Funciona muy bien! Justo lo que estaba buscando. Sin embargo, cambié 'exec' a' prepare'. Creo que capturará todos mis usos. –

+0

OOP es tan increíble: D – Juddling

+0

¿Se puede implementar esto de alguna manera para dar cuenta de 'PDOStatement' también? – Daniel

0

Sólo ejecutar:

SHOW PROFILES; 

El mayor Query ID es lo que está después. Esto también le dará información sobre los últimos 15 (predeterminado) tiempo de ejecución de consultas.

Cuestiones relacionadas