Problem mit COUNT bei Abfrage

DrEvil

Erfahrenes Mitglied
Hallo Community,
ich möchte in einer Tabelle die Einträge mit einem bestimmten Kriterium zählen
Code:
SELECT COUNT(*) FROM tabellenname WHERE payed = 1
Die Abfrage funktioniert auch in phpMyAdmin ohne Probleme.

In meiner php-Datei führe ich die Abfrage mittels
PHP:
DB::DoSql("SELECT COUNT(*) FROM tabellenname WHERE payed = 1");
durch.

Leider gibt er mir da immer das Ergebnis "1" aus. Das ist aber nicht richtig...

Die Funktion in der Datenbank-Klasse sieht wie folgt aus:
PHP:
function DoSql($sql) {
	
		if(!$this->res = mysql_query($sql, $this->con)) {
			die("(SQL-Ausführung) Fehler: ".mysql_error())."<br>";
		} else return TRUE;
		
	}

Ich habe keine Ahnung warum er COUNT nicht richtig ausführt...

Wenn ich
PHP:
mysql_query("SELECT COUNT(*) FROM tabellenname WHERE payed = 1");
mache, ist das Ergebnis "Resource id #7". Auch da weiß ich nicht, woher das nun wieder genommen wird... :(

Ein funktionierender Workaround ist:
PHP:
mysql_num_rows(mysql_query("SELECT * FROM tabellenname WHERE payed = 1"))

Ich möchte das aber nicht über SELECT lösen, weil (wenn ich mein MySQL-Handbuch richtig verstehe) COUNT schneller arbeitet, da die Einträge nicht komplett eingelesen werden. Im Interesse einer sauberen Arbeit würde ich deswegen eigentlich gerne die für's Zählen von Tabelleneinträgen vorgesehene SQL-Syntax nutzen.


Kann mir wer helfen?

Grüße Eric
 
Zuletzt bearbeitet:
Hi,

PHP:
function DoSql($sql) {
	
		if(!$this->res = mysql_query($sql, $this->con)) {
			die("(SQL-Ausführung) Fehler: ".mysql_error())."<br>";
		} else return TRUE;
		
	}

Es gibt einfach nur True zurück. True = 1, False = 0.

PHP:
mysql_query("SELECT COUNT(*) FROM tabellenname WHERE payed = 1");

PHP:
mysql_num_rows(mysql_query("SELECT * FROM tabellenname WHERE payed = 1"))

häng einfach mal ein mysql_result an: http://de2.php.net/manual/de/function.mysql-result.php

mysql_result($query,0);

müsste da funktionieren

mfg
 
Welche Methoden bietet die Klasse DB denn bei dir an? Kannst du die evtl. mal anhängen?

Fakt ist, das DoSql() nur das Query ausführt. Du bräuchtest die Methode, die aus dem Result-Set, was vermutlich zurückgegeben oder in der Klasse als Member mit geführt wird, die Ergebnisse raus holt. Du hast also "nur" mysql_query() ausgeführt, und musst jetzt noch die Methode der Klasse finden, die mysql_fetch_rows() oder dergleichen ausführt.
 
Hey, danke für eure Hilfe!

Manchmal sieht man das offensichtliche nicht... :)

Ich habe natürlich noch eine GetRes-Funktion
PHP:
	function GetRes() {
	
		$row = mysql_fetch_array($this->res, MYSQL_ASSOC);
		if(!is_array($row)) {
			return false;			
		} else return $row;
		
	}

Die benutze ich auch, wenn ich mehrere Zeilen auslese. Für "einfache" Anweisungen wie "INSERT", "DELETE" etc. hab ich einfach nur DoSql genommen - hat ja funktioniert...
Was ja jetzt auch irgendwie klar erscheint, warum das funktioniert... :)

@Sebbo: Danke für den mysql_result()-Hinweis. Hab mir die Kommentare dazu auch nochmal durchgelesen. Aus "Angst" irgendeinem der Probleme/Umständlichkeiten aufzusitzen, die dort mit mysql_result() beschrieben werden, werd ich aber bei dem Workaround bleiben.


Oder meint ihr es wäre sinnvoller eine andere Lösung zu nutzen? Nur mal so prinzipiell.
 
Prinzipell bin ich ein Freund von allgemeiner Anwendung. Sprich, man sucht sich etwas, was von vielen verwendet wird. So kann man sich sicher sein, dass

- man eine Lösung für ein Problem finden wird und
- das Stück Software supported wird.

Meiner Ansicht nach gibt es keinen Grund, selbst geschriebene Datenbank-Klassen zu benutzen, wenn es doch PDO gibt. Ich vermute, das deine DB-Klasse auch keine Prepared Statements unterstützt. Noch ein Grund zu wechseln, wenn es dafür noch nicht zu spät ist ;-)

PDO
 
Zurück