Klassen-Referenz - MySQLHandler

Artikel bewerten:
Dieser Artikel wurde noch nicht bewertet. Bewerten Sie diesen Artikel als erstes!
Der MySQL-Handler dient zur Abstraktion einer MySQL-Datenbank gegen die Anwendung. Er nimmt dem Entwickler die Sorge um Datenbank-Spezifika wie Konfiguration, Verbindungsaufbau und standardisiertes Ausführen von Statements ab. Für letzteres stehen dabei zwei Methoden zur Verfügung: Einerseits kann per executeTextStatement() jedes beliebige SQL-Statement ausgeführt werden, möchte der Entwickler die Statements in seiner Anwendung mehrfach und an unterschiedlichen Stellen verwenden, so können Statements ebenso in externe Statement-Dateien ausgelagert und per executeStatement() ausgeführt werden. Die hier relevanten Parameter können in der API-Dokumentation nachgelesen werden.


1. Allgemeine Verwendung

Um den MySQLHandler nutzen zu können muss dieser zuerst per
  import('core::database','MySQLHandler'); 
in die Applikation eingebunden werden. Anschließend kann mit dem Code-Fragment
   $SQL = &$this->__getServiceObject('core::database','MySQLHandler'); 
eine Referenz auf den Service erzeugt werden. Da hier die private Methode __getServiceObject() Verwendung findet ist sichergestellt, dass der angefragte Service nur einmal innerhalb der Anwendung erzeugt wird. Dies hat nicht nur einen verwaltungstechnischen, sondern im Fall des Datenbankzugriffs vor allem performancetechnische Vorteile. Intern müssen beispielsweise Datenbank-Verbindungen nur einmal hergestellt und Konfigurationen nur einmal gelesen werden.

Zur Konfiguration der Komponente muss die Konfigurationsdatei
  /apps/config/core/database/{CONTEXT}/{ENVIRONMENT}_connections.ini
vorhanden sein. {CONTEXT} ist dabei der Context der aktuellen Applikation, {ENVIRONMENT} der Wert der Umgebungsvariable aus der Registry. Details hierzu können im Kapitel Konfiguration nachgelesen werden. Diese konfiguriert den zu benutzenden Server, Benutzerdaten und die Datenbank. Eine typische Konfigurationsdatei hat folgenden Inhalt:
  [MySQL]
  DB.Host = ""
  DB.User = ""
  DB.Pass = ""
  DB.Name = ""
  DB.DebugMode = "true|false"
Falls der Parameter DB.DebugMode auf den Wert true eingestellt ist, legt der MySQLHandler ein Logfile an und notiert Fehler, die während der Benutzung auftreten.

Um nun Daten aus einer Datenbank zu lesen können folgende Zeilen in die Applikation eingebaut werden:
   $select 'SELECT somefield, anotherfield
              FROM mytable
              WHERE somefield = \'somevalue\';'
;
   
$result $SQL->executeTextStatement($select); 
Die mit dem Select angefragten Daten können anschließend mit einer while-Schleife abgeholt werden:
   while($data $SQL->fetchData($result)){

      
// ... //

    // end while
   

2. Statement-Auslagerung

Soll das gezeigte Statement ausgelagert werden, um von einer weiteren Applikation oder der selben an anderer Stelle verwendet zu werden, so kann die Methode executeStatement() dafür herangezogen werden. Dazu muss das Select in einer Datei mit dem Namen
   {ENVIRONMENT}_{StatementDateiName}.sql
abgelegt werden. Der MySQLHandler sucht diese Datei dann im Ordner
   {Namespace}/{Context}/statements/
Unter der Annahme, dass das Statement einem Modul unter dem Namespace modules::testmodule "gehört", die Umgebungsvariable nicht angepasst wurde und der Context der Applikation "sites::demosite" lautet muss die Datei den Namen
  DEFAULT_mystatement.sql
tragen und im Ordner
  /apps/config/modules/testmodule/sites/demosite/statements
abgelegt sein. Um das Statement auszuführen muss die Methode executeStatement() wie folgt verwendet werden:
   $params = array(
                   
'somefield' => 'somevalue'
                   
);
   
$result $SQL->executeStatement('modules::testmodule','mystatement',$params); 
Der dritte Parameter der Methode executeStatement() dient dazu Platzhalter im Statement zu füllen. Platzhalter werden mit "[" einem Namen und "]" gekennzeichnet. Der in den Klammern stehende Name ist gleichzeitig der Name des Platzhalters, der im Parameter-Array verwendet wird. Führt man das obige Beispiel weiter, so hat die Datei DEFAULT_mystatement.sql folgende Gestalt:
  SELECT somefield, anotherfield
  FROM mytable
  WHERE somefield = '[somefield]';
Ein Anwendungsbeispiel findet sich im Kontaktformular-Tutorial unter Kapitel 4.3.


3. Weitere Features

Der MySQLHandler besitzt weitere Tools zur Unterstützung der Implementierung. Bei Inserts wird die LAST_INSERT_ID automatisch eingelesen und vorgehalten. Diese kann nach dem Ausführen eines Inserts per getLastID() ausgelesen werden.

Darüber hinaus bietet der MySQLHandler Methoden wie getNumRows() und getAffectedRows() um die Ergebnis-Menge eines Selects oder Updates abfragen zu können und fetchData() um Daten von der MySQL abholen zu können.

Für automatisierte Full-Backups Full-Restores können die Methoden backupDatabase() und restoreDatabase() genutzt werden. Diese basieren auf den CLI-Programmen mysql und mysqldump und erfordern für Dump- und Restore-Aktionen einen priviligierten Datenbank-Benutzer.


Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.


Für diesen Artikel liegen aktuell keine Kommentare vor.