Fakt ist, dass die Datenbank eines der wichtigsten Bestandteile Ihrer Website ist. Sie ist daher mehr als schützenswert. Einmal zerstört, lassen sich die Daten oft nur schwer wiederherstellen.
WordPress gibt Ihnen daher einige Funktionen an die Hand mit deren Hilfe Sie Datenbankeinträge leicht und sicher bearbeiten können.
Das wpdb Objekt
In einer sehr frühen Startphase instanziiert WordPress die globale Variable $wpdb
, die so wie Ihre Klasse benannt wurde. Sie finden die genauen Definitionen in der Datei wp-includes/wp-db.php
3.
Die Klasse kann bzw. soll letztlich als Ersatz für die PHP-Internen SQL-Funktionen (z.B. mysql_query()
) genutzt werden. Und zwar aus drei Gründen:
- Die Nutzung der Klasse
wpdb
bietet mehr Sicherheit. - Es ist nach wie vor möglich, die komplette Datenbank-Engine auszutauschen (auch wenn das in den seltensten Fällen passiert). Verwendet ein Benutzer anstatt MySQL PostgreSQL, funktioniert z.B.
mysql_query()
nicht. - Weniger Schreibarbeit. Sie müssen z.B. nicht jedes mal eine Datenbankverbindung aufbauen, wenn Sie eine Abfrage durchführen. Sie nutzen stattdessen die bestehende Verbindung und sparen sich dazu eine Menge zusätzlichen Code.
$wpdb
beinhaltet viele Funktionen mit denen sich Daten einer Tabelle lesen, einfügen, aktualisieren oder löschen lassen.
Daten einfügen
Folgende Methode der Klasse wpdb
stellt WordPress grundsätzlich bereit:
<?php
class wpdb {
function insert( $table, $data, $format = null ) {
...
}
}
?>
Dabei gilt:
- $table
(string)
Der Name der Tabelle, in der Daten eingefügt werden sollen. - $data
(array)
Die Daten (als Array), die einfügt werden sollen. - $format
(array|string)
Die Formatierungsanweisung jedes einzelnen Elements in $data.
Beispiel:
Gehen wir davon aus, es liegt folgende Tabelle mit dem Namen mm_example_table
vor:
Daten aktualisieren
Zum aktualisieren von Datenbankinhalten stellt WordPress die Methode update()
zur Verfügung:
<?php
class wpdb {
function update( $table, $data, $where, $format = null, $where_format = null ) {
...
}
}
?>
Wobei gilt:
Daten löschen
Daten zu löschen ist mitunter noch einfacher:
<?php
class wpdb {
function delete( $table, $where, $where_format = null ) {
...
}
}
?>
Wobei gilt:
Daten ersetzen
Die Methode replace()
ersetzt seit Version 3.0.0 eine Zeile in einer Tabelle, falls diese existiert. Falls sie nicht existiert, wird eine neue Zeile eingefügt.
<?php
class wpdb {
function replace( $table, $data, $format = null ) {
...
}
}
?>
Wobei gilt:
Daten auslesen
Eine Variable auslesen
Um einen einzigen Wert einer Datenbank-Tabelle auszulesen, nutzen Sie die Methode get_var()
:
<?php
class wpdb {
function get_var( $query = null, $x = 0, $y = 0 ) {
...
}
}
?>
Wobei gilt:
Eine Zeile auslesen
Eine einzelne Zeile lässt sich mit der Methode get_row()
auslesen:
<?php
class wpdb {
function get_row( $query = null, $output = OBJECT, $y = 0 ) {
...
}
}
?>
Dabei gilt:
Eine Spalte auslesen
Ganze Spalten lassen sich mit der Methode get_col()
auslesen.
<?php
class wpdb {
function get_col( $query = null , $x = 0 ) {
...
}
}
?>
Wobei gilt:
Generische Abfragen
Wenn Sie keine Spalte, eine Zeile oder gar nur einen Wert aus der Datenbank auslesen wollen, sondern eine ganze Fülle an Daten benötigen, hilft Ihnen die Methode get_results()
:
<?php
class wpdb {
function get_results( $query = null, $output = OBJECT ) {
...
}
}
?>
Dabei gilt:
Allgemeine Abfragen an die Datenbank
Natürlich können Sie aber auch die Methode query()
nutzen um eine direkte Anfrage an die Datenbank zu stellen. Die Anfrage nutzt die globale Verbindung, die WordPress beim Start bereits hergestellt hat. Alle Methoden, die die Klasse wpdb
nutzt, basieren auf dieser Methode.
<?php
class wpdb {
function query( $query ) {
...
}
}
?>
Dabei gibt es nur einen Parameter $query
, der die eigentliche Abfrage enthält. Zurückgegeben wird entweder ein Integer-Wert, der die Anzahl der betroffenen Zeilen enthält oder false
wenn es während der Abfrage zu einem Fehler kam.
Vorbeugen von SQL-Injections
Sie haben in den vorherigen Beispielen zum Auslesen von Date gesehen, dass keine einzige Abfrage gefiltert wurde. Der Grund ist, dass alle Abfragen hart programmiert wurden. Das bedeutet: sie enthalten keine dynamischen Daten, die manipuliert werden könnten.
Wenn Sie jedoch eine dynamische Abfrage machen müssen, die von einer Benutzereingabe abhängt, empfehle ich Ihnen die entsprechenden Daten zu filtern und erst dann an die Datenbank zu übergeben.
Eigenschaft der Klasse wpdb
Die Klasse wdpb
hat einige Eigenschaften, auf die Sie direkt zugreifen und sie nutzen können.
Eine erweiterte Liste finden Sie im Kapitel zur Datenbank-API. Eine vollständige gibt es in der WordPress Referenz unter: http://codex.wordpress.org/Class_Reference/wpdb#Class_Variables. Hier ein Auszug davon:
- numqueries
(int)
Die Anzahl der Abfragen die bis zum jetzigen Zeitpunkt ausgeführt wurden. - queries
(array)
Ein Array von Datenbank-Abfragen die bis zum jetzigen Zeitpunkt ausgeführt wurden. Diese Eigenschaft wird jedoch nur gefüllt wenn die KonstanteSAVEQUERIES
in der Dateiwp-config.php
auftrue
gesetzt wurde. - insert_id
(int)
Die ID, die beim letztenINSERT
-Befehl durch eineAUTO_INCREMENT
-Spalte erzeugt wurde. - num_rows
(int)
Die Anzahl an Zeilen die die letzte Abfrage zurückgegeben hat. - prefix
(string)
Das Datenbank-Präfix. In einer normalen Einzelsite-Installation enthält es den Wert, der auch in derwp-config.php
angegeben wurde. Bei einer Multisite-Installation enthält es zusätzlich die Blog-ID. - base_prefix
(string)
Das Datenbank-Präfix, wie es inwp-config.php
angegeben wurde.