Quicknavi |
|
Klassen-Referenz - MySQLHandler
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.
|