This is an old revision of the document!


Datenbankzugriffsklasse

Ab der Version 2.0 gibt es nun eine Klasse für die Datenbankzugriffe. Diese Klasse besteht, ähnlich der Tabellenzugriffsklassen, aus 2 Teilen. Einer allgemeinen Klasse DB und dann der jeweiligen Erweiterung, in unserem Fall MySqlDB.

Vorteil dieser neuen Klasse ist z.B. eine einheitliche Fehlerbehandlung. Tritt ein Fehler im SQL-Statement auf, so wird nun automatisch eine aufbereitete Fehlermeldung ausgegeben und es muss nicht mehr, wie bisher, die Funktion db_error manuell aufgerufen werden. Außerdem ist hier auch die Aufrufverfolgung verbessert. Es wird nun jedes Script und jede Zeile angegeben, bei der der Fehler aufgetreten ist, ausgehend auf aufgerufenen Script des Users.

Neben der Fehlerbehandlung habe ich jetzt auch ein Logging der SQL-Aufrufe eingebaut. Sofern in der config.php die Variable $g_debug = 1 gesetzt ist und in der php.ini das PHP-Logging aktiviert ist, kann man in der PHP-Logdatei nun alle SQL-Statements sehen. Somit kann man sich schnell die fehlerhaften Statements anschauen oder prüfen, welche Scripte relativ viele Datenbankzugriffe haben.

Ein weiterer Vorteil der neuen Klassen ist die einfache Anbindung an weitere Datenbanken. Mit relativ wenig Aufwand können wir später Admidio auch auf anderen Datenbanken laufen lassen.

In der common.php wird für diese Klasse wieder ein globales Objekt $g_db definiert, welches im Moment per Default nur auf eine MySQL-Datenbank zugreifen kann. Die einzelnen Methodenaufrufe habe ich an unsere bisherigen MySQL-Funktionsaufrufe angelehnt nur fehlt das mysql_ vor der Funktion.

Im Code sieht die Änderung dann folgendermaßen aus:
Bisheriger Code

$sql    = "SELECT * FROM ". TBL_DATES;
$dates_result = mysql_query($sql, $g_adm_con);
db_error($dates_result,__FILE__,__LINE__);
 
while($row = mysql_fetch_array($dates_result))
{
   ...
}

Neuer Code

$sql    = "SELECT * FROM ". TBL_DATES;
$dates_result = $g_db->query($sql);
 
while($row = $g_db->fetch_array($dates_result))
{
   ...
}

Die Connection-ID muss nicht mehr übergeben werden, da diese in der Klasse verwaltet wird. Ansonsten sind alle Übergaben so geblieben, wie es in den Ursprünglichen MySQL-Funktionen war.

Sofern in der Schleife keine weiteren SQL-Statements ausgeführt werden, muss auch das Resourcen-Kennung (result) nicht übergeben werden. Intern wird dann automatisch die Letzte genommen.

  • de/entwickler/datenbankzugriffsklasse.1213543467.txt.gz
  • Last modified: 2008/06/15 17:24
  • by fasse