MySQLi und Query-Counts

Will man die Queries zählen, die man mit dem tollen neuen MySQLi in PHP auf einer Datenbank macht, muss man MySQLi folgendermaßen extenden, da MySQLi das selber nicht macht:
Zuerst extended man MySQLi und legt sich eine private Variable an, die mitzählt.


class MySQLiX extends MySQLi {
private $query_count = 0;

Dann wäre es angebracht, bei der prepare-Methode mitzuzählen. Dabei wird der Zähler erhöht und anschließend ganz normal das Ergebnis von prepare der Super-Klasse zurück zu geben. Dies würde analog auch für die query-Methode funktionieren.

public function prepare($query) {
$this->query_count++;
return parent::prepare($query);
}

Bei multiquery muss man schon etwas tricksen. Hier erhöht man Anzahl der Queries um die Anzahl der Semikolons, die man im übergebenen String findet. Dies kann natürlich zu überhöhten Werten führen, wenn es im String mehr Semikolons gibt als die am Ende der Queries, z.B. in Where-Bedingungen.

public function multi_query($query) {
$this->query_count+=substr_count($query,";");
return parent::multi_query($query);
}

Dann wäre noch eine Methode zum reseten des Zählers gut.

public function reset_count() {
$this->query_count=0;
}

Und letztlich noch eine Methode, um das Ergebnis abzugreifen.

public function __get($variable_name) {
if(isset($variable_name)) {
return $this->$variable_name;
}
}

Ein Objekt, das seine Queries mitzählt, wird nun wie folgt erzeugt (dabei ist zu beachten, dass die Klasse ggf. noch per require_once importiert werden sollte):

$dblink=new MySQLiX(/*übliche Parameter*/);

Die Methoden, die es schon bei MySQLi gab, kann man weiter wie bisher benutzen. Die letzten beiden Methoden benutzt man wie folgt:

$dblink->reset_count();
$dblink->query_count;

5 Kommentare

  1. Jetzt natürlich noch die große Frage nach dem wozu?
    Die Anzahl der Queries an eine DB ist so ziemlich egal, Sei es zum Loggen oder für Debugging; der Wert ist ziemlich sinnlos. Wenn es tatsächlich in einem System Geschwindigkeitsprobleme geben sollte, dann kann man MySQLs interne Logfunktion für Slow Queries benutzen, und die dort gelisteten Queries mal auf ihre Struktur und Indizes untersuchen. Über die Anzahl der Abfragen kann man jedenfalls keine Aussage treffen ob nur der Rechner zu schwach ist oder die Implementierung Müll ist.

Schreibe einen Kommentar