2012-10-12 20 views
6

W szczególności staram się przedłużyć obiekt PDO, aby dodać wewnętrzny licznik za każdym razem, gdy wykonywane jest zapytanie. Chcę to zrobić w taki sposób, że nie będę musiał zmieniać żadnych istniejących zapytań ani dodawać dodatkowej funkcji like this suggests.Liczba Liczba zapytań Obciążenie strony za pomocą PDO

Nie jestem zaznajomiony z klasami lub klasą PDO w szczególności, ale czy można to zrobić? Jak bym to zrobił?

Myślę o przedłużeniu query i execute i zwiększaniu przechowywanej zmiennej za każdym razem, gdy są wywoływane.

Odpowiedz

7

Rozszerzenie PDO będzie wykonane tak jak każda inna klasa. Czy to pasuje do twoich potrzeb? Jedyną inną zmianą kodu byłoby utworzenie instancji tej klasy zamiast klasy PDO podczas nawiązywania pierwszego połączenia.

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

Działa ładnie! Właśnie tego szukałem. Chociaż zmieniłem 'exec' na' przygotować'. Myślę, że uchwyci to wszystkie moje zastosowania. –

+0

OOP jest niesamowity: D – Juddling

+0

Czy można to w jakiś sposób zaimplementować, aby uwzględnić również "PDOStatement"? – Daniel

0

Wystarczy wykonać:

SHOW PROFILES; 

Największą Query ID jest to, czego po. W ten sposób otrzymasz informacje o 15 ostatnich (domyślnych) czasach wykonania zapytania.