{"id":53,"date":"2009-01-25T14:45:49","date_gmt":"2009-01-25T13:45:49","guid":{"rendered":"http:\/\/x3.net-agenten.de\/?p=53"},"modified":"2009-01-25T14:56:12","modified_gmt":"2009-01-25T13:56:12","slug":"mysqli-und-query-counts","status":"publish","type":"post","link":"https:\/\/x3.net-agenten.de\/?p=53","title":{"rendered":"MySQLi und Query-Counts"},"content":{"rendered":"<p>Will man die Queries z\u00e4hlen, die man mit dem tollen neuen MySQLi in PHP auf einer Datenbank macht, muss man MySQLi folgenderma\u00dfen extenden, da MySQLi das selber nicht macht:<br \/>\nZuerst extended man MySQLi und legt sich eine private Variable an, die mitz\u00e4hlt.<\/p>\n<blockquote><p>\n<code><br \/>\nclass MySQLiX extends MySQLi {<br \/>\n    private $query_count = 0;<\/code>\n<\/p><\/blockquote>\n<p>Dann w\u00e4re es angebracht, bei der prepare-Methode mitzuz\u00e4hlen. Dabei wird der Z\u00e4hler erh\u00f6ht und anschlie\u00dfend ganz normal das Ergebnis von prepare der Super-Klasse zur\u00fcck zu geben. Dies w\u00fcrde analog auch f\u00fcr die query-Methode funktionieren.<\/p>\n<blockquote><p><code>    public function prepare($query) {<br \/>\n        $this->query_count++;<br \/>\n        return parent::prepare($query);<br \/>\n    }<\/code><\/p><\/blockquote>\n<p>Bei multiquery muss man schon etwas tricksen. Hier erh\u00f6ht man Anzahl der Queries um die Anzahl der Semikolons, die man im \u00fcbergebenen String findet. Dies kann nat\u00fcrlich zu \u00fcberh\u00f6hten Werten f\u00fchren, wenn es im String mehr Semikolons gibt als die am Ende der Queries, z.B. in Where-Bedingungen.<\/p>\n<blockquote><p><code>    public function multi_query($query) {<br \/>\n        $this->query_count+=substr_count($query,\";\");<br \/>\n        return parent::multi_query($query);<br \/>\n    }<\/code><\/p><\/blockquote>\n<p>Dann w\u00e4re noch eine Methode zum reseten des Z\u00e4hlers gut.<\/p>\n<blockquote><p><code>    public function reset_count() {<br \/>\n        $this->query_count=0;<br \/>\n    }<\/code><\/p><\/blockquote>\n<p>Und letztlich noch eine Methode, um das Ergebnis abzugreifen.<\/p>\n<blockquote><p><code>    public function __get($variable_name) {<br \/>\n        if(isset($variable_name)) {<br \/>\n            return $this->$variable_name;<br \/>\n        }<br \/>\n    }<br \/>\n<\/code><\/p><\/blockquote>\n<p>Ein Objekt, das seine Queries mitz\u00e4hlt, wird nun wie folgt erzeugt (dabei ist zu beachten, dass die Klasse ggf. noch per require_once importiert werden sollte):<\/p>\n<blockquote><p><code>$dblink=new MySQLiX(\/*\u00fcbliche Parameter*\/);<\/code><\/p><\/blockquote>\n<p>Die Methoden, die es schon bei MySQLi gab, kann man weiter wie bisher benutzen. Die letzten beiden Methoden benutzt man wie folgt:<\/p>\n<blockquote><p><code>$dblink->reset_count();<br \/>\n$dblink->query_count;<\/code><\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Will man die Queries z\u00e4hlen, die man mit dem tollen neuen MySQLi in PHP auf einer Datenbank macht, muss man MySQLi folgenderma\u00dfen extenden, da MySQLi das selber nicht macht: Zuerst extended man MySQLi und legt sich eine private Variable an, die mitz\u00e4hlt. class MySQLiX extends MySQLi { private $query_count = 0; Dann w\u00e4re es angebracht,&hellip; <a class=\"more-link\" href=\"https:\/\/x3.net-agenten.de\/?p=53\"><span class=\"screen-reader-text\">MySQLi und Query-Counts<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[23],"tags":[24,155],"class_list":["post-53","post","type-post","status-publish","format-standard","hentry","category-php","tag-mysqli","tag-php","entry"],"_links":{"self":[{"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/posts\/53","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=53"}],"version-history":[{"count":4,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=\/wp\/v2\/posts\/53\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=53"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=53"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/x3.net-agenten.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=53"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}