Einfache Datenbankklasse

Ich habe vor einiger Zeit einmal eine Klasse in PHP geschrieben, mit der man seine MySQL-Verbindungen managen kann.

Mithilfe dieser Klasse kann man z.B. die Anzahl der MySQL-Queries auf einer Seite ermitteln, unter der Vorraussetzung, dass alle Queries über eine Instanz der Klasse laufen.

Der Code der Klasse:

class datenbank
{
  	var $cid = "";
	var $ergebnis = "";
	var $anfragen_ges = 0;

	function datenbank($db_host, $db_user, $db_pw)
	{
		if(!$this->cid = mysql_pconnect($db_host, $db_user, $db_pw))
		{
		$this->cid = mysql_connect($db_host, $db_user, $db_pw);
		return $this;
		}
	}

	function db_select($db_name)
	{
		mysql_select_db($db_name, $this->cid);
	}

	function sql_query($db_query_string)
	{
		$this->ergebnis = mysql_query($db_query_string, $this->cid);
		$this->anfragen_ges += 1;
		return $this->ergebnis;		

	}

	function num_rows($handler)
	{
		if(isset($handler))
		{
		 	return mysql_num_rows($handler);
		}
		else
		{
			return false;
		}
	}

}

Verbindungsaufbau
Eine Verbindung wird folgendermaßen aufgebaut:

$db = new datenbank("host", "user","password");
//$db enthält jetzt eine Instanz der Klasse datenbank

Auswahl einer Datenbank
Eine Datenbank wird so selektiert:

$db->db_select("database");

Ausführen einer Abfrage (Query)

$result = $db->sql_query("SELECT irgendwas FROM irgendwo WHERE irgendetwas='wert'");

$result enthält jetzt das Ergebnis der Abfrage. Bei einem Fehler enthält $result den boolschen Wert false.

Wieviele Queries wurden gemacht?

echo $db->anfragen_ges;

gibt die Anzahl der Abfragen aus.

Schlusswort
Diese Klasse ist auf jeden Fall noch ausbaufähig und veraltet. Sie setzt nämlich noch auf PHP4, aber ich hatte bisher keine Zeit zum Umschreiben.

Verbesserungsvorschläge sind willkommen!

1 Star2 Stars3 Stars4 Stars5 Stars (1 Stimme, durchschnittlich 1,00 / 5)
Loading...


6 Kommentare zu “Einfache Datenbankklasse”

  1. Hi,

    auch wenn ich den etwas älteren Beitrag rauskrame, hätte ich zu der Objektorientierung und DB-Class eine Frage: Wie sinnvoll ist es denn eine DB-Klasse in einer andere Klasse zu verwenden, die bpsw. auch auf Daten aus der Datenbank zugreift um diese zu verarbeiten?
    Als Beispiel eine User-Klasse, die einmal Daten ausliest und auch verändert. Darin kann man ja direkt sql-Statements absetzen…
    Ich seh da irgendwie noch nicht so den Sinn. Vllt. kannst du mich ja drauf stupfsen? 😉

  2. Die Datenbankklasse vereinfacht dir den Zugriff, da du nicht jedes Mal eine neue Verbindung aufbauen musst. Am besten übergibst du die Datenbankinstanz jeder Klasse, die Zugriff auf die DB benötigt. Zum Beispiel über den Konstruktor (oder Dependency Injection)

    Hast du noch fragen?

  3. Im Nachgang ist mir das Argument auch gekommen bzw. dass man hier Code sparen kann.

    Ja zwei Fragen hätte ich noch – wenn du so fragst, stell ich sie auch einfach mal gerne 😉
    Wenn ich jetzt eine Klasse User habe. Wie binde ich da die MySQL Klasse richtig ein und verwende sie, dann in den Funktionen? (mittels class User extended Datenbank?!)

    Wenn ich bspw. in einem Userscript entsprechend immer die Einträge für einen User anzeigen will. (in mysql geschrieben: where userid=x and username=xy…) Definiere ich das dann bspw. auch in der Datenbank-Klasse, oder definiere ich hier irgendwo globale Variablen auf die zurückgreife?!

  4. So, da bin ich wieder! Sorry für die Funkpause

    Klar, Fragen sind immer willkommen!

    extends ist der falsche Weg, da ein User keine Datenbank ist (bzw. eine Datenbank ist kein Teil eines Nutzers). Vielmehr ist die Datenbank etwas, das der Nutzer benötigt, um sich zu definieren. Ich würde also die Datenbank im Konstruktor des Users instanziieren und als Attribut abspeichern. Alternative: Konstruktor / setter / DI

    Die zweite Frage verstehe ich nicht so ganz. Vielleich kannst du die nochmal genauer stellen 🙂

    MfG
    Simon

  5. Ist ein gutes Grundgerüst wenn auch noch viel Fehlt. Das wichtigste für mich wäre da noch das Abfangen von MySQL Errors. Das Zählen der Querys finde ich gut. Achso, man könnte noch einen Debug-Modus einbauen der die Execute-Zeit einer Query zählt und ausgibt wenn ein Parameter $db->Debug auf true steht. Aber das sieht schonmal gut aus.

  6. Joa, da gäbe es noch viel zu tun 🙂

Hinterlasse einen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

»Informationen zum Artikel

Autor: Simon
Datum: 17.05.2008
Zeit: 19:26 Uhr
Kategorien: MySQL, Codeschnipsel
Gelesen: 6841x heute: 2x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Mehr zum Thema erfahren

Schlagwörter: , , ,

»Meta