====== 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 ist jetzt auch ein Logging der SQL-Aufrufe eingebaut. Sofern das [[de:entwickler:php.ini_einstellungen#admidio-debug-flag|Admidio-Debug-Flag]] 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 kann Admidio später auch auf anderen Datenbanken laufen.
In der common.php wird für diese Klasse wieder ein globales Objekt **$gDb** definiert, welches im Moment per Default nur auf eine MySQL-Datenbank zugreifen kann. Die einzelnen Methodenaufrufe sind an die 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 = $gDb->query($sql);
while($row = $gDb->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.