Wichtige Informationen zum Support!

dbConnect_LE - MySQL Schnittstelle

dbConnect_LESeit Anfang 2008 setze ich in praktisch allen Modulen und Addons das von mir entwickelte MySQL Interface dbConnect ein.

dbConnect ist objektorientiert, basisert auf PHP 5 und ermöglicht eine sehr einfache Strukturierung sowie Verwaltung von allen Datenbankanwendungen in WebsiteBaker. Das Interface übernimmt hierbei alle Standardaufgaben, wie das Anlegen von Tabellen oder die Einbindung in die interne WebsiteBaker Suche. Um die MySQL Syntax braucht man sich hierbei keinerlei Gedanken mehr zu machen. Wenn es doch einmal spezieller wird, unterstützt dbConnect den Programmierer bei der Entwicklung von SQL Abfragen durch einen Sandbox Modus und durch aussagekräftige Fehlermeldungen.

Der Nachteil von dbConnect war stets sein Ressourcenhunger - bei kleineren Anwendungen fällt er nicht ins Gewicht, bei größeren Anwendungen, die gleichzeitig Dutzende Tabellen offen halten führte dies allerdings zu Problemen.

dbConnect_LE ist die konsequente Weiterentwicklung von dbConnect. Das neue Interface ist schlank und kommt auch bei großen Anwendungen mit minimalen Resourcen aus. dbConnect_LE hat sich von alten Zöpfen befreit und unterstützt vorrangig UTF-8 Unicode - die in dbConnect enthaltenen Funktionen zum automatischen Maskieren und Demaskieren von Sonderzeichen, Umlauten usw. sind nicht mehr zeitgemäß und entfallen komplett.

Die Änderungen in dbConnect_LE sind sehr tiefgehend und umfangreich, trotzdem ist dbConnect_LE zu 100% kompatibel zu allen UTF-8 Anwendungen, die mit dbConnect realisert wurden - es muss lediglich die Parent Class von dbConnect auf dbConnectLE geändert werden.

Es liegt eine vollständige Dokumentation von dbConnect_LE vor.

Die Grundidee von dbConnect_LE ist Datentabellen als Objekte zu organisieren und ihnen grundlegende Fähigkeiten einfach zu vererben. In den meisten Fällen genügt es, die Felder zu definieren, den Rest erledigt dbConnect_LE:


class dbTest extends dbConnectLE {
 
  const field_id                     = 'qn_id';
  const field_name                   = 'qn_name';
  const field_title                  = 'qn_title';
  const field_description            = 'qn_desc';
  const field_mode                   = 'qn_mode';
  const field_groups                 = 'qn_groups';
  const field_shuffle_questions      = 'qn_shuffle_quest';
  const field_shuffle_answers        = 'qn_shuffle_answ';
  const field_questions              = 'qn_questions';
  const field_status                 = 'qn_status';
  const field_update_when            = 'qn_update_when';
  const field_update_by              = 'qn_update_by';
 
  const status_active                = 'statusActive';
  const status_locked                = 'statusLocked';
  const status_deleted               = 'statusDeleted';
 
  public $status_array = array(
    self::status_active            => mc_status_active,
    self::status_locked            => mc_status_locked,
    self::status_deleted           => mc_status_deleted
  );
 
  public function __construct() {
    parent::__construct();
    $this->setTableName('mod_mc_questionaire');
    $this->addFieldDefinition(self::field_id, "INT(11) NOT NULL AUTO_INCREMENT", true);
    $this->addFieldDefinition(self::field_name, "VARCHAR(80) NOT NULL DEFAULT ''");
    $this->addFieldDefinition(self::field_title, "VARCHAR(80) NOT NULL DEFAULT ''");
    $this->addFieldDefinition(self::field_description, "TEXT NOT NULL DEFAULT ''", false, false, true);
    $this->addFieldDefinition(self::field_mode, "VARCHAR(20) NOT NULL DEFAULT ''");
    $this->addFieldDefinition(self::field_groups, "VARCHAR(255) NOT NULL DEFAULT ''");
    $this->addFieldDefinition(self::field_shuffle_questions, "TINYINT NOT NULL DEFAULT '0'");
    $this->addFieldDefinition(self::field_shuffle_answers, "TINYINT NOT NULL DEFAULT '0'");
    $this->addFieldDefinition(self::field_questions, "VARCHAR(255) NOT NULL DEFAULT ''");
    $this->addFieldDefinition(self::field_status, "VARCHAR(20) NOT NULL DEFAULT '".self::status_active."'");
    $this->addFieldDefinition(self::field_update_when, "DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'");
    $this->addFieldDefinition(self::field_update_by, "VARCHAR(80) NOT NULL DEFAULT 'SYSTEM'");
    $this->checkFieldDefinitions();
  } // __construct()
 
} // class dbMultipleChoiceQuestionaire

In den allermeisten Fällen wird Ihnen eine Klassendefinition wie im obigen Beispiel völlig genügen, um alle anfallenden Aufgaben sehr bequem zu lösen.

Um jetzt in der install.php die Tabelle anzulegen genügt der folgende Aufruf:


$test = new dbTest();
$test->sqlCreateTable();

Genauso einfach ist das Einfügen und Auslesen von Daten:


// Datenobjekt initialisieren
$test = new dbTest();
 
// Daten in ein assoziatives Array schreiben
$data = array(dbTest::field_name => 'Name', dbTest::field_title => 'Titel');
// Datensatz schreiben - die ID des neuen Datensatz wird automatisch zurueckgegeben
if (!$test->sqlInsertRecord($data, $id)) {
  echo "Fehler: ".$test->getError();
} else {
  echo "Der Datensatz mit der ID $id wurde eingefügt.";
}
 
// Suchkriterien fuer den oder die Datensaetze
$where = array(dbTest::field_id => $id);
// Ergebnis wir in $data zurueckgegeben
$data = array();
// Datenbankabfrage ausfuehren
if (!$test->sqlSelectRecord($where, $data)) {
  echo "Fehler beim Auslesen des Datensatz $id!";
} else {
  print_r($data);
}

Es gibt für praktisch alle Grundfunktionen entsprechende Befehle - sollte der passende Befehl für eine spezielle Datenbankabfrage einmal nicht vorhanden sein, definieren Sie die SQL Abfrage selbst und übergeben Sie der Funktion sqlExec() - auch hier wird sich dbConnect_LE um alles weitere kümmern.

Anwendungsbeispiele für dbConnect_LE finden Sie in den Quellcodes praktisch aller meiner Module und Addons. In der Dokumentation finden Sie die Erläuterung aller Funktionen von dbConnect_LE.

Ralf Hertsch