0251 / 590 837 15
info@a-coding-project.de
;

Datenbankklasse Teil 1

Heute fangen wir in unserem CMS ein etwas größeres Thema an: Wir erstellen eine Datenklasse und benutzen sie im ganzen System. Der Vorschlag kam vom Johann, der mich auch erst einmal davon überzeugen musste. Des Weiteren gibt es heute einen neuen Einstiegspunkt, siehe unten.

Ab jetzt werden alle Sachen, die irgendwas mit Datenbanken zu tun haben (mysql_query, mysql_fetch_row) in dieser Klasse abgebildet. Die Datenbankklasse ist allerdings abstrakt. Es wird die erbende Klasse MySQL geben, die zum Beispiel alle MySQL-Sachen regelt. Das System hat folgende Vorteile:

  • Wir können die Datenbankpräfix automatisiert einfügen
  • Wir können später ohne große Probleme auch Datenbanken wie SQLite oder den Sql Server unterstützen
  • Wir können Datenbankfehler an einer Stelle abhandeln und zum Beispiel dem Admin eine Mail schicken
  • Wir können uns in der Klasse automatisiert gegen Sql Injektions schützen (mysql_real_escape_string)

Wir müssen diese Änderung sofort durchführen, da es später noch schwieriger wird das ganze umzusetzen. Im Kern des CMS werden alleine einige Erweiterungen hinzukommen, die wir sonst ersetzten müssten. Von Plugins mal ganz abgesehen.

Genug geredet, jetzt kommt der Quellcode. Johann hat mir schon ein paar Vorschläge für die Umsetzung der Klasse gemacht, die ich noch geschickt erweitert habe. Vielleicht habt ihr es schon vergessen: Wir haben bereits eine Datenbankklasse (siehe /system/classes/mysql.php). Diese ist hauptsächlich für unseren derzeit pausierenden DB-Manager zuständig. Einige Methoden habe ich in die abstrakte Klasse übernommen, andere ausgelassen (system/classes/database.php):

<?PHP
  abstract class DataBase{
  
      public $Name      = '';
  
      private $prefix   = '';
      private $server   = '';
      private $user     = '';
      private $password = '';
      private $host     = '';
      
      public abstract function Execute($sql);
      public abstract function GetTables();
      public abstract function GetColumns($table);
      public abstract function ReadField($sql);
      public abstract function ReadRow($sql);
      public abstract function ReadRows($sql);
      public abstract function Connect();
      public abstract function Disconnect();
      
      public __construct($config){
        include($config);
        $this->prefix   = $dbpraefix;
        $this->host     = $dbhost;
        $this->password = $dbpassword;
        $this->user     = $dbuser;
        $this->Name     = $db;
        $this->Connect();
      }
  
  }
?>

Als Entschädigung für die bevorstehende Arbeit habe ich euch einen neuen Einstiegpunkt gemacht:

http://blog.stevieswebsite.de/download/132.zip

Wenn ihr Probleme mit ContentLion habt meldet euch am besten im Forum.

Kommentare

Daniel schrieb am 02.03.2010:

Was heißt hier Arbeit, das macht doch Spaß.^^

Stefan Wienströer schrieb am 05.03.2010:

Da hast Du Recht! Es wird allerdings etwas dauern alle Klassen auf das neue Modell umzustellen.

Daniels Blog. Themen aus meiner Welt. schrieb am 29.03.2010:

[...] die neu Art auf die Datenbank zuzugreifen, umgebaut werden. Mit diesem Artikel ist die Arbeit an diesem Thema abgeschlossen. Das soll natürlich nicht heißen das die Arbeit an unserem OS-WCMS [...]