Datenbankabstraktion
MySQL, Firebird, SQLite - viele Datenbanken stehen zur Wahl. Da liegt es nahe, die eigene Anwendung unabhängig von der Datenbank zu entwickeln.

- Datenbankabstraktion
- Teil 2: Datenbankabstraktion
- Teil 3: Datenbankabstraktion
MySQL, Firebird, SQLite - viele Datenbanken stehen zur Wahl. Da liegt es nahe, die eigene Anwendung unabhängig von der Datenbank zu entwickeln. Eine datenbankgetriebene Anwendung benötigt Methoden, um auf die Datenbank zuzugreifen. Für MySQL sorgen die PHP-Erweiterungen mysql und mysqli für di...
MySQL, Firebird, SQLite - viele Datenbanken stehen zur Wahl. Da liegt es nahe, die eigene Anwendung unabhängig von der Datenbank zu entwickeln.
Eine datenbankgetriebene Anwendung benötigt Methoden, um auf die Datenbank zuzugreifen. Für MySQL sorgen die PHP-Erweiterungen mysql und mysqli für die gute Verbindung. Setzt man dagegen auf SQLite, kommt die SQLite-Erweiterung zum Einsatz.So gibt es für PHP über ein Dutzend verschiedener Datenbankerweiterungen. Ihnen ist eines gemeinsam, sie verstehen sich nur mit ihrer eigenen Datenbank. Aber nicht nur die Funktionen oder Methoden der Datenbankerweiterung sind das Problem, auch bei SQLselbst gibt es deutliche Unterschiede.

Betroffen sind vor allem spezielle Datenbankfunktionen wie Transaktionen und Indizes, aber auch das Steuern von Zeichensätzen. Die Datenbank- abstraktion möchte vor allem den Unterschieden bei SQL und Transaktionen Abhilfe schaffen. Gegen funktionale Unterschiede aufseiten der Datenbank ist allerdings kein Kraut gewachsen.
Im Kern übernimmt eine Datenbank- abstraktionsklasse den Verbindungsaufbau zu den verschiedenen Datenbanken. Dafür stellt sie eine Schnittstelle zur Verfügung. Mittlerweile hat sich allerdings eine als Standardweg herauskristallisiert, die PDO (PHP Data Objects).
Aufbau
Die PDO sind seit PHP 5.1 im Standardumfang mit dabei. Außerdem sind sie komplett in C geschrieben, der Sprache, in der PHP selbst entwickelt ist. Der besondere Vorteil ist die höhere Performance gegenüber einer Abstraktionsebene in PHP. Und Performance kann man beim Konzept der Datenbankabstraktion immer brauchen, denn schließlich heißt Unabhängigkeit auch, dass man manche Datenbankspezifika nicht nutzen darf, die ansonsten für mehr Leistung sorgen.
Die PDO bestehen aus zwei Teilen: den eigentlichen Programmierschnittstellen und für jedes Datenbanksystem, das Sie einsetzen möchten, einem separaten Treiber. Zentraler Code ist außerdem in der Schnittstelle selbst zusammengefasst. So werden auch Aktualisierungen recht einfach möglich.
Nun ist natürlich die Frage, für welche Systeme es Treiber gibt. Die Antwort heißt, für so gut wie alle. Hier die Wichtigsten:
•MySQL 3.x/4.x •SQLite 2 und SQLite 3 •PostgreSQL •Microsoft SQL Server •IBM Informix •Firebird •Oracle Call Interface •Über ODBC v3 zu IBM DB2, Access
Einrichtung
Ab PHP 5.1 sind die PDO schon mitgeliefert. Allerdings müssen sie bei der Konfiguration eingebaut werden. Unter Linux heißt das, dass Sie die PDO im configure-Kommando aktivieren müssen. Dazu benötigen Sie noch den Datenbanktreiber für ihre Datenbank. Im Beispiel ist das SQLite:
./configure --enable-pdo --enable-
pdo-sqlite
Auf vielen Systemen sind die PDO schon installiert. Sie sollten das zuerst mit phpinfo() nachprüfen. Die Dokumentation schlägt vor, die PDO als Shared Module zu installieren:
./configure --with-zlib --enable-
pdo=shared
Hier wird die zlib-Bibliothek benötigt. Außerdem müssen Sie dann die Erweiterungen in der php.ini aktivieren:
extension=pdo.so
Unter Windows ist die PDO eine DLL, die gleich mitgeliefert wird. Die einzelnen Datenbanktreiber sind ebenfalls DLLs. Beide müssen Sie in der php.ini aktivieren, indem Sie die folgenden Zeilen auskomentieren oder einfügen:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_mssql.dll
Wichtig ist: Zuerst den PDO-Treiber laden, dann die Datenbanktreiber. Manche Datenbanktreiber können auch noch bestimmte Bibliotheken benötigen. In Paketen wie XAMPP ist die PDO meist schon aktiviert. Für PHP 5.0 gibt es die PDO als separaten Download von . Die Installation erfolgt über den PEAR-Installer:
pear install pdo
Anschluss
Im ersten Schritt geht es nun um den Anschluss an eine Datenbank. Ausgangsbasis für die hier gezeigten Versuche ist eine einfache Datenbank mit drei Tabellen. Sie speichert Artikel und News. Zu den Artikeln werden die entsprechenden Autoren mit abgelegt. Ebenso bei den News.
CREATE TABLE IF NOT EXISTS 'artikel'(
'id' int(11) NOT NULL,
'inhalt' longtext NOT NULL,
'bild' blob,
'autoren_id' int(11) NOT NULL,
PRIMARY KEY ('id'))
CREATE TABLE IF NOT EXISTS 'autoren'(
'id' int(11) NOT NULL,
'name' varchar(255) NOT NULL,
PRIMARY KEY ('id') )
CREATE TABLE IF NOT EXISTS 'news' (
'id' int(11) NOT NULL,
'text' longtext NOT NULL,
'headline' varchar(255) NOT NULL,
'autoren_id' int(11) NOT NULL,
PRIMARY KEY ('id') )
Zum Testen kann diese Tabellenstruktur in einer MySQL-Datenbank, in einer SQLite-Datenbank und in einer MS-SQL-Server-Datenbank landen. Für einen einfachen Test reicht allerdings auch eine einzige Datenbank- Art aus. Wenn die Datenbank oder die Datenbanken stehen, befüllen Sie die Tabellen noch mit Dummy-Daten.