Icon für RSS-Feed Link zum XING-Profil
Wählen Sie eine Hintergrundfarbe:
Schwarzer Hintergrund Blauer Hintergrund Hellblauer Hintergrund Rose Hintergrund Grüner Hintergrund Grüner Hintergrund Olivfarbener Hintergrund Gelber Hintergrund Sandfarbiger Hintergrund Beiger Hintergrund Weisser Hintergrund
Texthintergrund:
Schwarzer Hintergrund Weisser Hintergrund Transparenter Hintergrund


Ladebild
Brick in the Wall

Datenbank-Klasse in PHP

Von Matu am 25. Mai, 2009 (18:15 Uhr) unter Kategorie: PHP

Um mit PHP eine Verbindung zu einer mySQL-Datenbank herzustellen, benötigt man unter anderem die mysql_connect()-Funktion von PHP.

Dabei wird es auf Dauer etwas mühselig, immer wieder auf´s Neue alle benötigten Funktionen einzubringen. Aus diesem Grund bietet es sich an, für den Zugriff auf eine Datenbank eine eigene objektorientierte Klasse zu programmieren, die einfach in jedes neue Projekt eingebunden wird (includiert oder required).
Für mein eigenes kleines CMS hatte ich vor längerer Zeit mal eine Klasse geschrieben, die nach Instanziierung eines Objektes folgendes ermöglicht:

  • Verbindung zur mySQL-Datenbank herstellen
  • Auswahl einer Datenbank/ Tabelle
  • Senden einer SQL-Anfrage
  • Daten holen (in einem Array)
  • Anzahl Datensätze anzeigen
    (z.B. zur Überprüfung).

Schritt für Schritt von oben nach unten:

<?php
//dbconnect.class.php

class 	DBconnect //Klassenname
{
     private $ers; //Hilfs-Variable

     ...

Zunächst kommt nach dem einleitenden PHP-Tag der spätere Name der Datei. Dieser wird auskommentiert und ist nicht zwingend notwendig, sollte ordnungshalber aber aufgeführt werden (Name, Erstellungsdatum … lasse ich mal außen vor).

Die Klasse bekommt nun ihren Namen, den ich am Anfang groß schreibe (genau wie in Java …) und wird durch das Schlüsselwort public für den öffentlichen Zugriff freigegeben. Die folgende Variable $ers dient innerhalb der Klasse als Helferlein und ist durch das Schlüsselwort privat nur innerhalb der Klasse verfügbar (kann nicht von außen angesprochen werden).
Darauf folgt der Konstruktor:

...

public function __construct($datenbank,$host="127.0.0.1",
                   $benutzer="root",$passwd="passwort")
{
  /*
  mysql_connect — ÖFFNET eine VERBINDUNG zu einem MySQL-
  Server und gibt eine Meldung aus, falls ein
  SQL-Fehler erfolgt
  */
  $db_link = mysql_connect($host,$benutzer,$passwd,TRUE)
              or die (mysql_error());
 /*
 ------------------------------------------------------------
 Anmerkung: Anstatt das Script über '... or die(...)' einfach
 abzubrechen, kann auch eine Fehlermeldung wie folgt ausgegeben
 werden.
 if(!$db_link) {
    trigger_error("Es konnte keine Verbindung zur Datenbank
    hergestellt werden.", E_USER_ERROR);
 }

 -------------------------------------------------------------
*/

  /*
  mysql_select_db — AUSWAHL einer MySQL DATENBANK
  */
  mysql_select_db($datenbank) or die("Konnte die Datenbank nicht waehlen.");
}

...

Der Konstruktor wird automatisch bei Erzeugung/ Instanziierung eines Objektes der Klasse DBconnect aufgerufen und erwartet Parameter (Datenbankname, Host, Benutzername und Passwort).
Wird stets nur auf eine Datenbank zugegriffen, dann kann den Parametern direkt in der Klasse ein Wert zugewiesen werden. Die Zuweisung erfolgt aber nur dann, wenn kein Wert für den jeweiligen Parameter übergeben wird.
In unserem Beispiel müßte für die Verbindung zur Datenbank lediglich der Name der Tabelle bei der Objekterzeugung mit übergeben werden. Die restlichen Informationen werden der Zuweisung (rot dargestellt) entnommen. Übergibt man aber nicht nur den Name der Tabelle, sondern zum Beispiel ein anderes Passwort (…), dann müssen alle Parameter in der richtigen Reihenfolge von links nach rechts übergeben werden (und die vordefinierten zählen dann nicht). Das bedeutet, dass zusätzlich zum Passwort auch der Benutzername übergeben werden muss, da dieser vor dem Passwort in der Parameterübergabe liegt.

Dies soll nur der Vollständigkeit halber verdeutlichen, dass einem Parameter so wie oben auch ein fester Wert zugewiesen werden kann.
Würde jetzt der Tabellenname ebenfalls einen festen Wert erhalten, dann bräuchte man überhaupt keinen Parameter übergeben (vorausgesetzt, die Werte stimmen mit denen der anzusprechenden Datenbank überein).
Ich merke, dass ich schon wieder viel zu viel schreibe und abdrifte, daher bremse ich hier etwas ab!
Durch den so definierten Konstruktor könnte nun im jeweiligen Script, wo unsere Klasse eingebunden wurde, schon ein Objekt erzeugt werden:

$datenbankverbindung = DBconnect('tabellenname');

// oder bei einer anderen Datenbank

$datenbankverbindung = DBconnect('tabellenname','127.0.0.1','willi','geheim');

Dadurch wird aber erst die Verbindung hergestellt.
Kommen wir nun weiter zu den Funktionen (auch Methoden genannt), durch die nun mit der Datenbank kommuniziert werden kann, nachdem die Verbindung aufgebaut wurde.

function sql($sql_query)
  {
      return $this->ers = mysql_query($sql_query)
      or die ('Anfrage fehlgeschlagen');
      /*mysql_query — SENDET eine ANFRAGE an MySQL*/
  }

function data()
  {
      return mysql_fetch_row($this->ers);
      /*mysql_fetch_row — LIEFERT einen DATENSATZ
        als indiziertes ARRAY*/
  }

function anzahl()
  {
      return mysql_num_rows($this->ers);
      /*mysql_num_rows — LIEFERT die ANZAHL der
        DATENSÄTZE*/

  }

function __destruct()
  {
      mysql_close();
      /*mysql_close — SCHLIEßT die VERBINDUNG zur Datenbank*/

  }

Die erste Funktion sql ermöglich es, durch die PHP-Funktion mysql_query(’string’) ein SQL-Statement an die Datenbank zu stellen (SELECT, UPDATE, DELETE, …).
Bei den weiteren Funktionen sollte klar sein, was sie bewirken. Wobei die __destruct-Funktion eigentlich nicht nötig ist, da nach Beendigung des jeweiligen Scriptes die Verbindung sowieso getrennt wird. Jedoch kann es vorkommen, dass mehrere Verbindungen hergestellt werden sollen …!
Was hat man nun gewonnen? Dazu sehen Sie sich bitte folgende Beispiele an.
Ohne DBconnect-Klasse

$db_link = mysql_connect($host,$benutzer,$passwd,TRUE)
or die (mysql_error());

mysql_select_db('tabellenname')
or die("Konnte die Datenbank nicht waehlen.");

$sql_query = 'SELECT * FROM datenbank';

$ressource = mysql_query($sql_query)
                  or die ('Anfrage fehlgeschlagen');

$anzahl = mysql_num_rows($ressource);

if($anzahl > 0){
     while ($data = mysql_fetch_array($ressource)){
     ...
     }
}

Mit DBconnect-Klasse:

$dbconnect = new DBconnect("datenbank");
$sql_query = 'SELECT * FROM tabellenname';
$dbconnect->sql($sql_query);
if($dbconnect->anzahl() > 0){
    while($data=$dbconnect->data()){
    ...
    }
}

Sehr viel kürzer und übersichtlicher, oder?! Man beachte im Beispiel ohne DBconnect-Klasse die Variable $ressource. Die Übergabe dieses Wertes erfolgt bei uns schon in der Klasse selber. Sie haben es bestimmt erkannt, dafür wurde unsere Variable $ers … unser Helferlein eingesetzt.
Der Quellcode steht zur freien Verfügung!

(Hier noch mal der gesamte Quellcode)
------------------------------------------------------------------------------------------------------------------------
<?php
//dbconnect.class.php
class 	DBconnect
{
	private $ers;

	 /*Konstruktor ... wird automatisch bei Erzeugung/ Instanziierung eines Objektes der Klasse
              aufgerufen und erwartet Parameter (Datenbankname, Host, Benutzername, Passwort)*/
	public function __construct($datenbank,$host="127.0.0.1",$benutzer="root",$passwd="passwort")
	{
		 /*mysql_connect — ÖFFNET eine VERBINDUNG zu einem MySQL-Server und
                          gibt eine Meldung aus, falls ein SQL-Fehler erfolgt*/
		$db_link = mysql_connect($host,$benutzer,$passwd,TRUE) or die (mysql_error());
		 /*mysql_select_db — AUSWAHL einer MySQL DATENBANK*/
		mysql_select_db($datenbank) or die("Konnte die Datenbank nicht waehlen.");
		 /*if(!$db_link) echo "Fehler DB-Verbindung";*/
	}

	function sql($sql_query)
	{
		return $this->ers = mysql_query($sql_query) or die ('Anfrage fehlgeschlagen');
                /*mysql_query — SENDET eine ANFRAGE an MySQL*/
	}

	function data()
	{
		return mysql_fetch_row($this->ers);
                /*mysql_fetch_row — LIEFERT einen DATENSATZ als indiziertes ARRAY*/
	}

	function anzahl()
	{

		return mysql_num_rows($this->ers);
                 /*mysql_num_rows — LIEFERT die ANZAHL der DATENSÄTZE*/

	}

	function __destruct()
	{
		mysql_close();
                /*mysql_close — SCHLIEßT die VERBINDUNG zur Datenbank*/
	}
}

?>

Diesen einfach in einen Editor ihrer Wahl kopieren und zum Beispiel als dbconnect.class.php speichern. In ein neues Projekt wird die Klasse direkt oben per include oder require eingebunden:

include("class/dbconnect.class.php");
 // oder 
require("class/dbconnect.class.php");
 // oder 
require_once("class/dbconnect.class.php");

Ich hoffe, ich konnte dem einen oder anderen die Vorteile einer Datenbank-Klasse näherbringen.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 4,67 out of 5)
Loading ... Loading ...

2 Antworten zu “Datenbank-Klasse in PHP”

  1. Toni sagt:

    $dbconnect = new DBconnect(”tabellenname”);
    $sql_query = ‘SELECT * FROM datenbank’;

    Muss es nicht ander heissen:

    $dbconnect = new DBconnect(”datenbank”);
    $sql_query = ‘SELECT * FROM tabellenname’;

    ;)

  2. Matu sagt:

    Da hast Du Recht Toni! :spy:

Deine Meinung ist mir wichtig!

Es besteht die Möglichkeit, Kommentare nachträglich innerhalb einer Zeitspanne von 5 Minuten zu ändern (Keine werblichen Kommentare)
Jeder 1. Kommentar muss freigeschaltet werden!

Smileys:spy:

Nach oben