Alle SQL Queries anzeigen lassen inkl. Anzeige der Abfragedauer.

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich suche vergebens nach einer Möglichkeit, das ich mir alle SQL Queries anzeigen lasse, die mit einem aktuellen Seitenaufruf ausgeführt werden. Ich will halt wissen wie lange jede Abfrage an Zeit in Anspruch nimmt. hat da jemand einen Tip für mich?

Vielen Dank und ein frohes Fest :-)
 
Kannst du den Quellcode in dem besagte Queries ausgeführt werden denn verändern? Dann könntest du selber die Zeiten "messen" (microtime nach Query - microtime vor Query = Dauer...)
 
Ich habe es nun genau so gelöst.
In meiner PDOStatement Klasse folgendes:

PHP:
        public function execute($params = array()) {
            
            self::$cfg = Registry::get('config');
            
            if(self::$cfg->get(':db_debug') == true){
                $start = microtime(true);
                $result = parent::execute($params);
                $time = microtime(true) - $start;
                PDO::$log[] = array('query' => '[PS] ' . $this->queryString,
                                    'time' => round($time * 1000, 3));        
         
                return $result;                
            }else{
                return parent::execute($params);    
            }
            
        }

In der PDO Klasse werte ich es dann mit einer eigenen Methode aus und lasse es im __destruct() ausgeben.
Funktioniert soweit ganz gut. Danke für die Unterstützung!

Gruß
 
Ah - jepp. Also das SQL-Statement ohne die Werte drin. Ist nett, aber nicht gut zum Nachvollziehen.

Wenn du schon eine Ableitung hast, dann würde ich das Parameter-Parsen zu Ausgabzwecken mit einbauen. Die Daten werden immer noch mit bindParam/bindVar an die DB geschickt.

Kurzer Test zum Vergleich
PHP:
include 'connectPDO.php';
include 'YPDOStmt.php';

$stmt = $pdo->prepare("SELECT * FROM test WHERE id = ?");
$stmt->bindValue(1, 3, PDO::PARAM_INT);
$stmt->execute();
var_Dump('queryString aus PDStatement: '.$stmt->queryString);

$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('YPDOStmt', array($pdo)));
$stmt = $pdo->prepare("SELECT * FROM test WHERE id = ?");
$stmt->bindValue(1, 3, PDO::PARAM_INT);
$stmt->execute();
var_Dump('queryString aus YPDOStmt: '.$stmt->queryString);
var_Dump('executedSql aus YPDOStmt: '.$stmt->executedSql);

Ausgabe:
Code:
string(60) "queryString aus PDStatement: SELECT * FROM test WHERE id = ?"
string(57) "queryString aus YPDOStmt: SELECT * FROM test WHERE id = ?"
string(59) "executedSql aus YPDOStmt: SELECT * FROM test WHERE id = '3'"
 
Ach ok. Wusste nicht das es auch so geht. Das ist natütlich optimal und übersichtlicher.
Ich werde mir das mal genauer anschauen und in meine Klasse übernehmen :-) .

Danke Dir und frohes Fest !
 
Zurück