[PHP] MYSQL Abfragen zählen

resoucer

Gesperrt
ID: 77379
L
20 April 2006
2.846
109
Hi, wollte mal fragen ob man mit einem befehl die ganzen mysql abfragen zählen kann.

halt am ende jeder php datei soll stehen
xx Querys wurden ausgeführt.

weis nicht genau ob es geht bzw. ob es sowas gibt.

Habe es aber schon in vbb Foren gesehen
 
am besten du schreibst eine klasse mit einer variable $querienr. Immer wenn die Funktion mit der Abfrage aufgerufen wird, machst du eben $this->querienr++.
nachdem alle abfragen erledigt wurden, kannst du mit $Klasse->querienr die anzahl ausgeben.
 
bei Klassen als schneller tipp singletons bzw. Statische Variablen (die Dinger hießen doch so??)

Gruß aus Berlin

leller
 
glowhand schrieb:
am besten du schreibst eine klasse mit einer variable $querienr. Immer wenn die Funktion mit der Abfrage aufgerufen wird, machst du eben $this->querienr++.
nachdem alle abfragen erledigt wurden, kannst du mit $Klasse->querienr die anzahl ausgeben.
Ist das auch ohne Klasse möglich ?
 
Du könntest auch einfach am Anfang der Seite eine Variable auf null setzen und bei jedem Query die Variable um eins erhöhen...

Das Problem dabei wäre nur, dass du, wenn du die Variable dann an einem Punkt ausgibst, die Queries, die danach kommen, nicht berücksichtigst...

Ich würde dir raten, Klassen zu verwenden. Das ist einfach und effektiv!
 
Zuletzt bearbeitet:
evident schrieb:
könntest auch einfach am Anfang der Seite ne Variable auf null setzen und bei jedem Query die Variable um eins erhöhen...

das Problem dabei wäre nur, dass du, wenn du die Variable dann an einem Punkt ausgibst, die Queries, die danach kommen, nicht berücksichtigst...

Ich würde dir raten, Klassen zu verwenden. Das ist einfach und effektiv!
Um auf die MySQL Klasse zurück zu kommen.
Ich habe mir das Tutorial bei QuakeNet angeschaut, das war das einzige was ich gefunden habe.
https://tut.php-q.net/mysql-class.html
Komme aber nicht wirklich damit zurecht :(

PHP:
$sql="SELECT usr_name, usr_mail FROM ´b_usr´ WHERE usr_name='$usr_name' OR usr_mail='$usr_mail'";

		$qry=new Query($sql); // Klasse intilaisieren
		$query=$qry->fetch(); // Abfrage nach Userdaten
		
		$num=$qry->numRows();// Testet ob der Username oder Email bereits vorhanden
		
			if($num>="0"){
			  // Nicht Erfolgreiche Regestrierung
			$smarty->assign('content', 'regestrierung_03.tpl');	  
			}else{

 // Erfolgreiche Regestrierung
			$smarty->assign('usr_mail', $usr_mail);	  	
			$eintrag_01="INSERT INTO b_usr ('usr_name', 'usr_pw', 'usr_mail', 'usr_name_real', 'usr_plz') VALUES ('$usr_name', '$usr_pw', '$usr_mail', '$usr_name_real', '$usr_plz')";
			$eintrag_02=new Query($eintrag_01);
			$do=$eintrag_02->query();

}

Mache ich jetzt schon was falsch, denn als Fehler kommt :

Warning: Missing argument 1 for Query::Query() in D:\apachefriends\xampp\htdocs\betteln\inc.mysql.php on line 14

Hier der Quelltext wo der Fehler anscheinend auftritt :

PHP:
function Query($sql)
        {
          // Query in der Klasse speichern
        $this->_sql = trim($sql);
        $this->_result = mysql_query($this->_sql);
        if(!$this->_result)
        {
            $this->_errno = mysql_errno();
            $this->_error = mysql_error();
        }   
        }

Ich hoffe ihr könnt mir wieder ein wenig weiter helfen :).
 
Intialisier die Klasse und schick dann die Query ab

PHP:
$db = new Query;
$db->query(DEINE_QUERY);
// ..

Könnte allerdings Probleme geben, wenn es eine Funktion gibt, die den Klassennamen hat; diese wird dann als Konstruktor behandelt.
 
wie mein vorredner schon sagte dein fehler liegt hier
PHP:
          $eintrag_02=new Query($eintrag_01);
            $do=$eintrag_02->query();
es muss so sein
PHP:
          $eintrag_02=new Query();
            $do=$eintrag_02->query($eintrag_01);
 
Hab das Problem jetzt anderweitig gelöst hab alles von neuem gemacht, hab viel zu viele Querys gemacht etc. :)
LÖL hab erst jetzt begriffen was ich eigentlich vor hatte, war einfach nen Logikfehler.
Den für alle anderen die sich die Frage vielleicht noch stellen...
erstmal indem ich die Klasse intialisiere mach ich auch gleichzeitig nen query von dem ausgesehen reicht die die numRows() funtkion schon da muss ich gar nix fetchen, da maximal eh nur ein Wert gefunden werden kann, da es ja ein Schutz gegen mehrfache benutzen sein soll :).

Danke an alle die mir wie immer Interessiert geholfen haben.
Thx, nochma, denke aber das es nicht nur bei der Frage bleibt *g* ;)
 
Zuletzt bearbeitet:
laut dem tut brauchst du nur das

$newsview = new Query($sql);

also in deinem fall so

PHP:
$eintrag_02=new Query($eintrag_01);
 
nochmal ein zusatz von mir

PHP:
        $qry=new Query($sql); // Klasse intilaisieren
        $query=$qry->fetch(); // Abfrage nach Userdaten
        
        $num=$qry->numRows();// Testet ob der Username oder Email bereits vorhanden

dort hast du es richtig aber wieso frägst du die iuserdaten ab und danach num rows

entweder umgekehrt damit keine fehler kommen also nur wenn
PHP:
if($qry->numRows())
dann fetchen

bzw verstehe ich net warum du überhaupt fetch das brauchst du doch net für den schon registriert check

ist in meinen augen sinnlos :-? aber ich weis ja net genau was du vor hast

im gleiche zug würde ich diese umschreiben

PHP:
    function numRows()
    {
        if($this->error()) {
            $return = -1;
        } else {
            $return = mysql_num_rows($this->_result);
        }
        return $return;
    }
in
PHP:
    function numRows($max)
    {
        if($this->error())
            return false;
        elseif (mysql_num_rows($this->_result) < $max)
            return true;
    }

nur zu wenn du zeilen anzuahl mit count abfrägst und nie die anzahl mit der funktion brauchst
 
Zuletzt bearbeitet:
Wenn dus unbedingt Prozedurial willst:
PHP:
function my_query($query)
{
  global $query_counter;
  $query_counter ++; 
  return mysql_query($query);
}
;)
Dann einfach anstelle von mysql_query my_query aufrufen..

Rate dir aber trotzdem zu einer Sauberen DB-Klasse. Am besten Template Basiert...