phpbar.de logo

Mailinglisten-Archive

[php] Problem mit einer Classe - Ueberschreiben von Speicher?!

[php] Problem mit einer Classe - Ueberschreiben von Speicher?!

Thomas Foerster php_(at)_phpcenter.de
Fri, 18 Jan 2002 14:25:29 +0100


Hallo,

erstmal ein gekuerzter Auszug aus meinen Klassen (Connecten usw. hab ich zur
Uebersicht entfernt) :

class DB {
    var $result;

	function Query($sql) {
	  $this->freeResources();
        $this->query = $sql;
        if (eregi("^select ", $this->query)) { // Testen auf SELECT
           if (($this->result = mysql_query($this->query, $this->conn)) ==
false) {
              $this->mysql_error = _(at)_mysql_error($this->conn);
              $this->mysql_errno = _(at)_mysql_errno($this->conn);
              $this->error = 1;
              return false;
           }
           if ( ($this->numrows = _(at)_mysql_num_rows($this->result)) <= 0) {
              _(at)_mysql_free_result($this->result);
              $this->mysql_error = _(at)_mysql_error($this->conn);
              $this->mysql_errno = _(at)_mysql_errno($this->conn);
              $this->error = 1;
              return false;
           }
           return $this->result;
        } else {
           if (($this->result = mysql_query($this->query, $this->conn)) ==
false) {
              $this->mysql_error = _(at)_mysql_error($this->conn);
              $this->mysql_errno = _(at)_mysql_errno($this->conn);
              $this->error = 1;
              return false;
           }
           if ( ($this->affected_rows = _(at)_mysql_affected_rows($this->conn)) ==
0) {
              $this->mysql_error = _(at)_mysql_error($this->conn);
              $this->mysql_errno = _(at)_mysql_errno($this->conn);
              $this->error = 0;
              return true; // Query war OK, es hat sich nur nichts geaendert
           } else {
              $this->error = 0;
              return true;
           }
        }
    }
}

class CAT_MAIN extends DB {
	function CAT_MAIN() {
		DB::DB();
		$this->error = 0;

		$this->prepareConnection(SQL_USER, SQL_PASS, SQL_DB, SQL_HOST);
		if(!$this->Connect()) {
			$this->error = 1;
		}
	}
	function getnav() {
		return $this->Query('SELECT * FROM nav ORDER BY position');
	}

	function getsubnav($nid) {
		return $this->Query("SELECT * FROM subnav WHERE navid=$nid ORDER BY name");
	}

	function pageNavigation() {
		$nav = $this->getnav();
		while ($row = mysql_fetch_array($nav)) {  // LINE 112
			$re = $this->getsubnav($row["id"]);
			/* ..... */
			while ($ro = mysql_fetch_array($re)) {
				echo $re["name"];
			}
		}
	}

}

So. in pageNavigation() hole ich mir zuerst einen Result und speicher diesen
in $nav ab.
Diesen gehe ich per mysql_fetch_array durch und in dieser schleife hole ich
mir einen 2. Result
in $re. Der 1. Durchlauf der aeussern Schleife funktioniert problemlos, doch
beim 2. Durchlauf kommt
die Meldung:
Warning:  3 is not a valid MySQL result resource in
/data/www/cat.n-online.net/mods/catmainclass.php on line 112

Line 112 ist oben mit // LINE 112 gekennzeichnet zwecks Uebersicht.

Es sieht so aus, als wuerde der innere Aufruf von $re = $this->getsubnav(...)
die Variable $nav mit dem Result aus dem
inneren Aufruf ueberscheiben (sowas bin ich bisher nur von meiner schlampigen
C-Programmierung gewont).
Sehe ich das richtig? Die Frage ist nun, wie kann ich das Problem beheben?
Solange ich nur 1 Mysql-Result habe klappt
meine Vererbung und Funktionen usw. problemlos, nur wenn ich 2 Results habe,
die ich aber in 2 verschiedenen Variablen
habe kommt dieser Fehler.

Kann mir dazu jemand einen Tipp geben oder mir eine "bessere" Loesung zeigen?
(Vielleicht sollte man das mit den Klassen
anders machen?!)

Vielen Dank,
  Thomas


php::bar PHP Wiki   -   Listenarchive