Verschachtelte DB-Abfrage oop

campari

Erfahrenes Mitglied
Wie kann ich verschachtelte mysql-Abfragen objektorientiert machen?
Erhalte immer Verbindungsfehler, sobald in der Schleife eine weitere Abfrage ausgeführt werden soll.
Normale PHP4 mysql-Abrage in der Schleife wird wie gewohnt ausgeführt.
Warum ist das so?
Danke für Hirnwäsche.

class.listtop.php:
PHP:
class listtop
{
	public function top($tabelle)
	{
		$db = new db();
		$fa = $db->fetch_array("SELECT id FROM $tabelle");
		if(!empty($fa))
		{
			$nr = 1;
			foreach($fa AS $f)
			{
				$pos = "sub_tabelle_".$nr;
				$rw = new db();
				$r = $rw->get_row("SELECT id FROM $pos")
				if($r == 0)
				{
					$r = $nor;
				}
				$each .= $f['id'].$r;
				$nr++;
			}
			return $each;
		}
		else
		{
			return $notab;
		}
	}
}
class.conn.php
PHP:
class db
{
	function __construct()
	{
		global $fdb, $fconn, $basedir;
		require_once("./_config/config.db.php");
		$this->verbindung = @mysql_connect($dbhost, $dbuser, $dbpass);
		if($this->verbindung)
		{
			if(!mysql_select_db($dbdb))
			{
				$this->verbindung = FALSE;
				die($fdb);
			}
		}
		else
		{
			$this->verbindung = FALSE;
			die($fconn);
		}
	}
	public function query($query_string)
	{
		global $fquery;
		if($this->verbindung)
		{
			if($this->mysqlquery = @mysql_query($query_string))
			{
				return $this->mysqlquery;
			}
			else
			{
				$this->close();
				die($fquery);
			}
		}
	}
	public function get_row($sql_string)
	{
		$this->result = $this->query($sql_string);
		$this->row = mysql_num_rows($this->result);
		return $this->row;
	}	
}

Noch eine zweite Frage:
Bis jetzt importier ich Variablen aus anderen Dateien immer über global in jeder Methode der Klasse. Geht das auch anders, also dass die externen Variablen einmal für die Klasse und damit alle Methoden eingelesen werden?

Vielen Dank :)
 
1. Du solltest deine Datenbankklasse mit Singleton nutzen, denn du erstellst pro Instanz eine neue Verbindung zur Datenbank. Altrernativ könntest du mysql_pconnect() verwenden, ist aber meiner Ansicht nach nicht so sauber.

2. Du instanzierst in der foreach-Schleife das DB-Objket neu -> worse-case, mach das einmalig vorher! Vielleicht können nicht os viele Verbindungen gleichzeitig zur DB gemacht werden.
 
OK, hatte angenommen, ich müsste jedesmal ein Objekt erzeugen. Aber so mit einmal erzeugen klappt das.

Bleibt noch:
Wie kann man Variablen, die in einer anderen Datei definiert sind, für alle Methoden einer Klasse verfügbar machen, ohne jedesmal mit require_once() oder global zu arbeiten?

Chers
 
Zurück