Um Database verwenden zu können, benötigen Sie natürlich zunächst das entsprechende Paket sowie die Base-Komponente. Sind Installation und Einbindung wie auf der Zeta-Website beschrieben [3] erfolgt, erzeugen Sie mithilfe der ezcDbFactory-Klasse eine neue Instanz von ezcDbHandler, passend für die aktuell verwendete Datenbank.
Listing 1
$db = ezcDbFactory::create( 'sqlite://' . __DIR__ . '/db.sqlite' ); function quoteColumn( ezcDbHandler $db, $column, $table ) { return $db->quoteIdentifier( $table ) . '.' . $db->quoteIdentifier( $column ); } $select = $db->createSelectQuery(); $select->select( quoteColumn( $db, 'title', 'entries' ), quoteColumn( $db, 'name', 'authors' ) )->from( $db->quoteIdentifier( 'entries' ) )->leftJoin( $db->quoteIdentifier( 'authors' ), $select->expr->eq( quoteColumn( $db, 'author_id', 'entries' ), quoteColumn( $db, 'id', 'authors' ) ) ); $statement = $select->prepare(); $statement->execute(); var_dump( $statement->fetchAll( PDO::FETCH_ASSOC ) );
Im Codebeispiel wird in der ersten Zeile ein Datenbank-Handler für eine SQLite-Datenbank erzeugt. Ersetzen Sie $db einfach durch einen Handler für eine andere Datenbank, wie MySQL oder Oracle, um Ihre Anwendung anzupassen. Als Nächstes wird im Beispiel eine kleine Hilfsfunktion definiert, die den weiteren Quellcode lesbarer macht: quoteColumn()versieht eine Kombination aus Spalten- und Tabellenname mit für die Datenbank passenden Escape-Zeichen.
Nun wird ein Objekt für eine SELECT-Anfrage erzeugt. Auf diesem Objekt arbeiten Sie mit einem so genannten „Fließenden Interface“ und schreiben SQL-Code mit PHP-Methodenaufrufen. Die SQL-Abstraktion übernimmt die Aufgabe, den passenden SQL-Code für die verwendete Datenbank zu erzeugen und emuliert gegebenenfalls fehlende Features. Ein Beispiel ist das bei MySQL und SQLite beliebte LIMIT für Oracle-Datenbanken.
Die Methodenaufrufe auf dem SELECT-Query-Objekt sind relativ selbsterklärend: Mit select()werden die zu selektierenden Spalten angegeben, die from()-Methode erzeugt den FROM-Teil der Anfrage. Auch Joins über mehrere Tabellen sind kein Problem, in diesem Fall ein LEFT JOIN. Der passende Methodenaufruf erwartet den Namen der zu verbindenden Tabelle und die JOIN-Bedingung. Jedes Query-Objekt stellt ein Attribut $expr bereit. Die darauf verfügbaren Methoden erlauben es Ihnen, verschiedenste Bestandteile von Ausdrücken zu erzeugen – im Beispiel wird die Methode eq()verwendet, um eine Gleichheitsbedingung zu erhalten. Zu jedem geladenen Eintrag wird hier also der Name des Autors angefragt.
Nach Modellierung der SQL-Anfrage wird auf dem SELECT-Objekt die Methode prepare()aufgerufen. Die Rückgabe ist ein Standard-PDO_Statement-Objekt, mit dem Sie nun die Anfrage an die Datenbank senden und die Resultate erhalten können.
ezcDatabase kann nicht nur SELECT- sondern auch INSERT-, UPDATE- und DELETE-Queries modellieren und unterstützt dabei verschiedenste praktische Features, wie das Binden von Werten und Parametern in Anfragen, verschachtelte Transaktionen und mehr. Sind Sie nicht sicher, welche Datenbank letztendlich beim Kunden zum Einsatz kommt, oder entwickeln Sie ein Produkt, welches mit verschiedensten Datenbanksystemen arbeiten können muss? Dann lohnt sich ein Blick in die Database-Komponente!