Sprachen: Englisch * Italiano • 日本語 Русский • 中文(简体) • 中文(繁體) • 한국어 • (Fügen Sie Ihre Sprache hinzu)
Mit der Datenbank sprechen: Die wpdb-Klasse
WordPress definiert eine Klasse namens wpdb, die eine Reihe von Funktionen enthält, die zur Interaktion mit einer Datenbank verwendet werden. Der Hauptzweck besteht darin, eine Schnittstelle zur WordPress-Datenbank bereitzustellen, kann jedoch zur Kommunikation mit jeder anderen geeigneten Datenbank verwendet werden. Der Klassenquellcode basiert lose auf der ezSQL-Klasse; geschrieben und gepflegt von Justin Vincent
Mit dem $wpdb-Objekt
Warnung: Methoden in der wpdb()
-Klasse sollten nicht direkt aufgerufen werden. Verwenden Sie stattdessen das globale Objekt $wpdb
!
WordPress bietet eine globale Objektvariable, $wpdb
, die eine Instanziierung der wpdb-Klasse ist, die in /wp-includes/wp-db definiert ist.PHP. Standardmäßig wird $wpdb
instanziiert, um mit der WordPress-Datenbank zu kommunizieren. Um auf $wpdb
in Ihrem WordPress-PHP-Code zuzugreifen, deklarieren Sie $wpdb
als globale Variable mit global keyword
oder verwenden Sie die superglobale $GLOBALS
auf folgende Weise:
// 1st Method - Declaring $wpdb as global and using it to execute an SQL query statement that returns a PHP objectglobal $wpdb;$results = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );// 2nd Method - Utilizing the $GLOBALS superglobal. Does not require global keyword ( but may not be best practice )$results = $GLOBALS->get_results( "SELECT * FROM {$wpdb->prefix}options WHERE option_id = 1", OBJECT );
Das $wpdb
-Objekt ist nicht auf die von WordPress erstellten Standardtabellen beschränkt; Es kann verwendet werden, um Daten aus jeder Tabelle in der WordPress-Datenbank zu lesen (z. B. benutzerdefinierte Plugin-Tabellen). Um beispielsweise einige Informationen aus einer benutzerdefinierten Tabelle namens „mytable“ auszuwählen, können Sie Folgendes tun.
$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );
Das $wpdb
-Objekt kann mit einer beliebigen Anzahl von Tabellen kommunizieren, jedoch jeweils nur mit einer Datenbank. standardmäßig die WordPress-Datenbank. In dem seltenen Fall, dass Sie eine Verbindung zu einer anderen Datenbank herstellen müssen, müssen Sie Ihr eigenes Objekt aus der Klasse wpdb
mit Ihren eigenen Datenbankverbindungsinformationen instanziieren. Bei extrem komplizierten Setups mit vielen Datenbanken sollten Sie stattdessen hyperdb verwenden.
Eine Warnung
Einige der Funktionen in dieser Klasse nehmen eine SQL-Anweisung als Eingabe. Sie müssen SQL Escape alle nicht vertrauenswürdigen Werte, die Sie in die SQL-Abfrage integrieren, um SQL-Injection-Angriffe zu verhindern. Überprüfen Sie die Dokumentation, um festzustellen, ob die Funktion, die Sie verwenden möchten, SQL für Sie entweicht oder erwartet, dass sie vorab maskiert wird.
Weitere Informationen zum SQL-Escaping in WordPress finden Sie im Abschnitt Abfragen vor SQL-Injection-Angriffen schützen weiter unten.
Variable AUSWÄHLEN
Die Funktion get_var
gibt eine einzelne Variable aus der Datenbank zurück. Obwohl nur eine Variable zurückgegeben wird, wird das gesamte Ergebnis der Abfrage zur späteren Verwendung zwischengespeichert. Gibt NULL zurück, wenn kein Ergebnis gefunden wird.
<?php $wpdb->get_var( 'query', column_offset, row_offset ); ?>
query (string) Die Abfrage, die Sie ausführen möchten. Wenn Sie diesen Parameter aufnull
setzen, wird die angegebene Variable aus den zwischengespeicherten Ergebnissen der vorherigen Abfrage zurückgegeben. column_offset (integer) Die gewünschte Spalte (0 ist die erste). Der Standardwert ist 0. row_offset (integer) Die gewünschte Zeile (0 ist die erste). Der Standardwert ist 0.
Beispiele
Abrufen und Anzeigen der Anzahl der Benutzer.
<?php$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );echo "<p>User count is {$user_count}</p>";?>
Abrufen und Anzeigen der Summe eines benutzerdefinierten Feldwerts.
<?php// set the meta_key to the appropriate custom field meta key$meta_key = 'miles';$allmiles = $wpdb->get_var( $wpdb->prepare( "SELECT sum(meta_value) FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) );echo "<p>Total miles is {$allmiles}</p>";?>
Zeile AUSWÄHLEN
Um eine ganze Zeile aus einer Abfrage abzurufen, verwenden Sie get_row
. Die Funktion kann die Zeile als Objekt, assoziatives Array oder numerisch indiziertes Array zurückgeben. Wenn mehr als eine Zeile von der Abfrage zurückgegeben wird, wird nur die angegebene Zeile von der Funktion zurückgegeben, aber alle Zeilen werden zur späteren Verwendung zwischengespeichert. Gibt NULL zurück Wenn kein Ergebnis gefunden wird, berücksichtigen Sie dies, wenn Sie den zurückgegebenen Wert in Argumenten verwenden, siehe Beispiel unten.
<?php $wpdb->get_row('query', output_type, row_offset); ?>
query (string) Die Abfrage, die Sie ausführen möchten. output_type Eine von drei vordefinierten Konstanten. Standardmäßig OBJEKT.
- OBJEKT – Ergebnis wird als Objekt ausgegeben.
- ARRAY_A – Ergebnis wird als assoziatives Array ausgegeben.
- ARRAY_N – Das Ergebnis wird als numerisch indiziertes Array ausgegeben.
row_offset (integer) Die gewünschte Zeile (0 ist die erste). Der Standardwert ist 0.
Beispiele
Holen Sie sich alle Informationen über Link 10.
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10" );
Die Eigenschaften des $mylink
-Objekts sind die Spaltennamen des Ergebnisses aus der SQL-Abfrage (in diesem Beispiel alle Spalten aus der $wpdb->links
-Tabelle, Sie können jedoch auch nur bestimmte Spalten abfragen).
echo $mylink->link_id; // prints "10"
Im Gegensatz dazu würde die Verwendung von
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A );
zu einem assoziativen Array führen:
echo $mylink; // prints "10"
und
$mylink = $wpdb->get_row( "SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N );
würde zu einem numerisch indizierten Array führen:
echo $mylink; // prints "10"
Wenn in der Verknüpfungstabelle kein Datensatz mit der ID 10 vorhanden ist, wird null
zurückgegeben. Folgendes wäre dann falsch:
if ( null !== $mylink ) { // do something with the link return true;} else { // no link found return false;}
Spalte AUSWÄHLEN
Verwenden Sie get_col
, um eine Spalte AUSZUWÄHLEN. Diese Funktion gibt ein eindimensionales Array aus. Wenn mehr als eine Spalte von der Abfrage zurückgegeben wird, wird nur die angegebene Spalte von der Funktion zurückgegeben, aber das gesamte Ergebnis wird zur späteren Verwendung zwischengespeichert. Gibt ein leeres Array zurück, wenn kein Ergebnis gefunden wird.
<?php $wpdb->get_col( 'query', column_offset ); ?>
query (string) die Abfrage, die Sie ausführen möchten. Wenn Sie diesen Parameter aufnull
setzen, wird die angegebene Spalte aus den zwischengespeicherten Ergebnissen der vorherigen Abfrage zurückgegeben. column_offset (integer) Die gewünschte Spalte (0 ist die erste). Der Standardwert ist 0.
Beispiele
Nehmen wir für dieses Beispiel an, dass der Blog Informationen über Automobile gewidmet ist. Jeder Beitrag beschreibt ein bestimmtes Auto (z. B. 1969 Ford Mustang), und drei benutzerdefinierte Felder, Hersteller, Modell und Jahr, werden jedem Beitrag zugewiesen. In diesem Beispiel werden die Beitragstitel angezeigt, die nach einem bestimmten Hersteller (Ford) gefiltert und nach Modell und Jahr sortiert sind.
Das get_col-Formular der wpdb-Klasse wird verwendet, um ein Array aller Post-IDs zurückzugeben, die die Kriterien erfüllen und in der richtigen Reihenfolge sortiert sind. Dann wird ein foreach-Konstrukt verwendet, um dieses Array von Post-IDs zu durchlaufen und den Titel jedes Posts anzuzeigen. Beachten Sie, dass die SQL für dieses Beispiel von Andomar erstellt wurde.
<?php $meta_key1= 'model';$meta_key2= 'year';$meta_key3= 'manufacturer';$meta_key3_value= 'Ford';$postids=$wpdb->get_col( $wpdb->prepare( "SELECT key3.post_idFROM $wpdb->postmeta key3INNER JOIN $wpdb->postmeta key1 ON key1.post_id = key3.post_id AND key1.meta_key = %s INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key3.post_id AND key2.meta_key = %sWHERE key3.meta_key = %s AND key3.meta_value = %sORDER BY key1.meta_value, key2.meta_value",$meta_key1, $meta_key2, $meta_key3, $meta_key3_value) ); if ( $postids ) {echo "List of {$meta_key3_value}(s), sorted by {$meta_key1}, {$meta_key2}";foreach ( $postids as $id ) { $post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php} }?>
In diesem Beispiel werden alle Beiträge aufgelistet, die ein bestimmtes benutzerdefiniertes Feld enthalten, jedoch nach dem Wert eines zweiten benutzerdefinierten Felds sortiert.
<?php// List all posts with custom field Color, sorted by the value of custom field Display_Order// does not exclude any 'post_type'// assumes each post has just one custom field for Color, and one for Display_Order$meta_key1 = 'Color';$meta_key2 = 'Display_Order';$postids = $wpdb->get_col( $wpdb->prepare( "SELECT key1.post_idFROM $wpdb->postmeta key1INNER JOIN $wpdb->postmeta key2 ON key2.post_id = key1.post_id AND key2.meta_key = %sWHERE key1.meta_key = %sORDER BY key2.meta_value+(0) ASC", $meta_key2,$meta_key1) ); if ( $postids ) {echo "List of {$meta_key1} posts, sorted by {$meta_key2}";foreach ( $postids as $id ) {$post = get_post( intval( $id ) );setup_postdata( $post );?><p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php}}?>
Generische Ergebnisse AUSWÄHLEN
Generische, mehrzeilige Ergebnisse können mit get_results
aus der Datenbank abgerufen werden. Die Funktion gibt das gesamte Abfrageergebnis als Array zurück. Jedes Element dieses Arrays entspricht einer Zeile des Abfrageergebnisses und kann wie get_row
ein Objekt, ein assoziatives Array oder ein nummeriertes Array sein. Wenn keine übereinstimmenden Zeilen gefunden werden oder ein Datenbankfehler vorliegt, ist der Rückgabewert ein leeres Array. Wenn Ihre $query-Zeichenfolge leer ist oder Sie einen ungültigen $output_type übergeben, wird NULL zurückgegeben.
<?php $wpdb->get_results( 'query', output_type ); ?>
query (string) Die Abfrage, die Sie ausführen möchten. output_type Eine von vier vordefinierten Konstanten. Standardmäßig OBJEKT. Weitere Informationen finden Sie unter AUSWÄHLEN einer Zeile und ihrer Beispiele.
- OBJECT – result wird als numerisch indiziertes Array von Zeilenobjekten ausgegeben.
- OBJECT_K – Das Ergebnis wird als assoziatives Array von Zeilenobjekten ausgegeben, wobei die Werte der ersten Spalte als Schlüssel verwendet werden (Duplikate werden verworfen).
- ARRAY_A – Das Ergebnis wird als numerisch indiziertes Array von assoziativen Arrays ausgegeben, wobei Spaltennamen als Schlüssel verwendet werden.
- ARRAY_N – Das Ergebnis wird als numerisch indiziertes Array von numerisch indizierten Arrays ausgegeben.
Da diese Funktion die Funktion $wpdb->query() verwendet, sind alle Klassenvariablen ordnungsgemäß gesetzt. Die Anzahl der Ergebnisse für eine ‚SELECT‘-Abfrage wird in $wpdb->num_rows gespeichert.
Beispiele
Holen Sie sich die IDs und Titel aller Entwürfe von Benutzer 5 und geben Sie die Titel wieder.
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");foreach ( $fivesdrafts as $fivesdraft ) {echo $fivesdraft->post_title;}
Holen Sie sich alle Informationen zu den Entwürfen von Benutzer 5.
<?php$fivesdrafts = $wpdb->get_results( "SELECT * FROM $wpdb->postsWHERE post_status = 'draft' AND post_author = 5");if ( $fivesdrafts ){foreach ( $fivesdrafts as $post ){setup_postdata( $post );?><h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2><?php}}else{?><h2>Not Found</h2><?php}?>
Zeile EINFÜGEN
Fügen Sie eine Zeile in eine Tabelle ein.
<?php $wpdb->insert( $table, $data, $format ); ?>
table (string) Der Name der Tabelle, in die Daten eingefügt werden sollen. daten (Array) Einzufügende Daten (in Spalte => Wertepaare). Sowohl $data Spalten als auch $data Werte sollten „raw“ sein (weder sollte SQL escaped sein). format (array/string) (optional) Ein Array von Formaten, die jedem der Werte in $data zugeordnet werden sollen. Wenn string , wird dieses Format für alle Werte in $data verwendet. Wenn sie weggelassen werden, werden alle Werte in $data als Zeichenfolgen behandelt, sofern in wpdb :: $field_types nichts anderes angegeben ist.
Mögliche Formatwerte: %s als String; %d als Integer (ganze Zahl); und %f als Float. (Siehe unten für weitere Informationen.)
Nach dem Einfügen kann auf die für die Spalte AUTO_INCREMENT generierte ID zugegriffen werden mit:
$wpdb->insert_id
Diese Funktion gibt false zurück, wenn die Zeile nicht eingefügt werden konnte. Andernfalls wird die Anzahl der betroffenen Zeilen zurückgegeben (die immer 1 ist).
Bitte beachten Sie: Der Werteteil der Spalte des Datenparameters =>Wertepaare müssen skalar sein. Wenn Sie ein Array (oder Objekt) als einzufügenden Wert übergeben, wird eine Warnung ähnlich wie „mysql_real_escape_string() erwartet, dass Parameter 1 ein String ist, Array in Zeile 880 in der Datei /var/www/html/wp-includes/wp-db .PHP“.
Beispiele
Fügen Sie zwei Spalten in einer Zeile ein, wobei der erste Wert ein String und der zweite eine Zahl ist:
$wpdb->insert( 'table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );
Zeile ERSETZEN
Ersetzen Sie eine Zeile in einer Tabelle, falls vorhanden, oder fügen Sie eine neue Zeile in eine Tabelle ein, falls die Zeile noch nicht vorhanden war.
<?php $wpdb->replace( $table, $data, $format ); ?>
table (string) Der Name der Tabelle, in der Daten ersetzt werden sollen. daten (Array) Zu ersetzende Daten (in Spalte => Wertepaare). Sowohl $data Spalten als auch $data Werte sollten „raw“ sein (weder sollte SQL escaped sein). format (array /string) (optional) Ein Array von Formaten, die jedem Wert in $data zugeordnet werden sollen. Wenn string , wird dieses Format für alle Werte in $data verwendet. Wenn sie weggelassen werden, werden alle Werte in $data als Zeichenfolgen behandelt, sofern in wpdb :: $field_types nichts anderes angegeben ist.
Mögliche Formatwerte: %s als String; %d als Integer (ganze Zahl); und %f als Float. (Siehe unten für weitere Informationen.)
Wenn die Länge eines String-Elements im Parameter $data array länger ist als die definierte Länge in der MySQL-Datenbanktabelle, schlägt die Einfügung fehl, diese Funktion gibt false zurück, aber $wpdb->last_error wird nicht auf eine beschreibende Nachricht gesetzt. Sie müssen sicherstellen, dass die Daten, die Sie einfügen möchten, in die Datenbank passen.
Nach dem Ersetzen kann auf die für die Spalte AUTO_INCREMENT generierte ID zugegriffen werden mit:
$wpdb->insert_id
Diese Funktion gibt einen count zurück, um die Anzahl der betroffenen Zeilen anzugeben. Dies ist die Summe der gelöschten und eingefügten Zeilen. Wenn die Zählung für eine einzeilige ERSETZUNG 1 beträgt, wurde eine Zeile eingefügt und keine Zeilen gelöscht. Wenn die Anzahl größer als 1 ist, wurden eine oder mehrere alte Zeilen gelöscht, bevor die neue Zeile eingefügt wurde. Es ist möglich, dass eine einzelne Zeile mehr als eine alte Zeile ersetzt, wenn die Tabelle mehrere eindeutige Indizes enthält und die neue Zeile Werte für verschiedene alte Zeilen in verschiedenen eindeutigen Indizes dupliziert.
Diese Funktion gibt false zurück, wenn eine vorhandene Zeile nicht ersetzt und eine neue Zeile nicht eingefügt werden konnte.
Beispiele
Ersetzen Sie eine Zeile, wobei der erste Wert die Zeilen-ID, der zweite eine Zeichenfolge und der dritte eine Zahl ist:
$wpdb->replace( 'table', array( 'indexed_id' => 1,'column1' => 'value1', 'column2' => 123 ), array( '%d','%s', '%d' ) );
Zeilen AKTUALISIEREN
Aktualisieren Sie eine Zeile in der Tabelle. Gibt false zurück, wenn Fehler auftreten, oder die Anzahl der betroffenen Zeilen, wenn dies erfolgreich ist.
<?php $wpdb->update( $table, $data, $where, $format = null, $where_format = null ); ?>
table (string) Der Name der zu aktualisierenden Tabelle. daten (Array) Zu aktualisierende Daten (in Spalte => Wertepaare). Sowohl $data Spalten als auch $data Werte sollten „raw“ sein (weder sollte SQL escaped sein). Dies bedeutet, dass Sie bei Verwendung von GET- oder POST-Daten möglicherweise stripslashes() verwenden müssen, um Schrägstriche in der Datenbank zu vermeiden. where (array) Ein benanntes Array von WHERE-Klauseln (in column => Wertepaaren). Mehrere Klauseln werden mit ANDs verbunden. Sowohl $ where-Spalten als auch $ where-Werte sollten „roh“ sein. format (array/string) (optional) Ein Array von Formaten, die jedem der Werte in $data zugeordnet werden sollen. Wenn string , wird dieses Format für alle Werte in $data verwendet. where_format (array | string) (optional) Ein Array von Formaten, die jedem der Werte in $where zugeordnet werden sollen. Wenn string , wird dieses Format für alle Elemente in $where verwendet.
Mögliche Formatwerte: %s als String; %d als Integer (ganze Zahl) und %f als Float. (Siehe unten für weitere Informationen.) Wenn weggelassen, werden alle Werte in $where als Strings behandelt.
Rückgabewerte: Diese Funktion gibt die Anzahl der aktualisierten Zeilen oder false zurück, wenn ein Fehler vorliegt. Beachten Sie, dass, wenn die $data mit dem übereinstimmen, was bereits in der Datenbank vorhanden ist, keine Zeilen aktualisiert werden, sodass 0 zurückgegeben wird. Aus diesem Grund sollten Sie die Rückgabe wahrscheinlich mit false === $result
Examples
überprüfen Aktualisieren Sie eine Zeile, in der die ID 1 ist, der Wert in der ersten Spalte ist eine Zeichenfolge und der Wert in der zweiten Spalte ist eine Zahl:
$wpdb->update( 'table', array( 'column1' => 'value1',// string'column2' => 'value2'// integer (number) ), array( 'ID' => 1 ), array( '%s',// value1'%d'// value2), array( '%d' ) );
Achtung: %d
kann nicht mit Kommawerten umgehen – wenn Sie keine vollständigen Zahlen verwenden, verwenden Sie string/%s.
Zeilen LÖSCHEN
Die Löschfunktion wurde in WordPress 3.4.0 hinzugefügt und kann zum Löschen von Zeilen aus einer Tabelle verwendet werden. Die Verwendung ist update und insert sehr ähnlich. Es gibt die Anzahl der aktualisierten Zeilen oder false im Fehlerfall zurück.
Verwendung
<?php $wpdb->delete( $table, $where, $where_format = null ); ?>
Parameter
$table (string) (erforderlich) Tabellenname. Standard: None $where (array) (erforderlich) Ein benanntes Array von WHERE-Klauseln (in Spalte -> Wertepaaren). Mehrere Klauseln werden mit ANDs verbunden. Sowohl $ where-Spalten als auch $ where-Werte sollten ‚roh‘ sein. Standard: None $where_format (string/array) (optional) Ein Array von Formaten, die jedem der Werte in $where zugeordnet werden sollen. Wenn es sich um eine Zeichenfolge handelt, wird dieses Format für alle Elemente in $where verwendet. Ein Format ist eines von ‚%d‘, ‚%f‘, ‚%s‘ (Integer, Float, String; siehe unten für weitere Informationen). Wenn sie weggelassen werden, werden alle Werte in $where als Zeichenfolgen behandelt, sofern in wpdb :: $field_types nichts anderes angegeben ist. Standard: null
Beispiele
// Default usage.$wpdb->delete( 'table', array( 'ID' => 1 ) );// Using where formatting.$wpdb->delete( 'table', array( 'ID' => 1 ), array( '%d' ) );
Ausführen allgemeiner Abfragen
Mit der Funktion query
können Sie jede SQL-Abfrage in der WordPress-Datenbank ausführen. Es wird am besten verwendet, wenn bestimmte, benutzerdefinierte oder anderweitig komplexe SQL-Abfragen erforderlich sind. Grundlegendere Abfragen, z. B. das Auswählen von Informationen aus einer Tabelle, finden Sie in den anderen obigen wpdb
-Funktionen, z. B. get_results, get_var, get_row or get_col
.
Allgemeine Syntax
<?php $wpdb->query('query'); ?>
query (string) Die SQL-Abfrage, die Sie ausführen möchten.
Diese Funktion gibt einen ganzzahligen Wert zurück, der die Anzahl der betroffenen/ausgewählten Zeilen für SELECT, INSERT, DELETE, UPDATE usw. angibt. Für CREATE-, ALTER-, TRUNCATE- und DROP-SQL-Anweisungen (die ganze Tabellen anstelle bestimmter Zeilen betreffen) gibt diese Funktion bei Erfolg TRUE
zurück. Wenn ein MySQL-Fehler auftritt, gibt die Funktion FALSE
zurück. Beachten Sie, dass Sie beim Überprüfen des Rückgabewerts vorsichtig sein sollten, da sowohl 0 als auch FALSE
für Zeilenabfragen zurückgegeben werden können. Verwenden Sie den Identitätsoperator (===), um nach Fehlern zu suchen (z. B. false === $result) und ob Zeilen betroffen waren (z. B. 0 === $result).
Beispiele
Löschen Sie den ‚Gargle‘-Metaschlüssel und -wert aus Post 13. (Wir fügen die ‚Prepare‘-Methode hinzu, um sicherzustellen, dass es sich nicht um eine illegale Operation oder illegale Zeichen handelt):
$wpdb->query( $wpdb->prepare( " DELETE FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s", 13, 'gargle' ));
Durchgeführt in WordPress von delete_post_meta()
.
Setzen Sie das übergeordnete Element von Seite 15 auf Seite 7.
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_parent = %dWHERE ID = %dAND post_status = %s", 7, 15, 'static') );
Abfragen vor SQL-Injection-Angriffen schützen
Eine vollständigere Übersicht über SQL-Escaping in WordPress finden Sie unter Datenbankdatenvalidierung. Es ist ein Muss für alle WordPress-Code-Mitwirkenden und Plugin-Autoren.
Alle Daten in SQL-Abfragen müssen SQL-Escaped sein, bevor die SQL-Abfrage ausgeführt wird, um SQL-Injection-Angriffe zu verhindern. Die prepare
-Methode führt diese Funktionalität für WordPress aus, die sowohl eine sprintf()-ähnliche als auch eine vsprintf() -ähnliche Syntax unterstützt.
Bitte beachten Sie: Ab 3.5, wpdb::prepare() erzwingt mindestens 2 Argumente.
<?php $sql = $wpdb->prepare( 'query' , value_parameter ); ?>
query (string) Die SQL-Abfrage, die Sie ausführen möchten, mit Platzhaltern (siehe unten). value_parameter (int|string|array) Der Wert, der in den Platzhalter eingefügt werden soll. Viele Werte können übergeben werden, indem einfach mehr Argumente auf sprintf () -ähnliche Weise übergeben werden. Alternativ kann das zweite Argument ein Array sein, das die Werte wie in der PHP-Funktion vsprintf() enthält. Es muss darauf geachtet werden, keine direkte Benutzereingabe in diesen Parameter zuzulassen, da dies die Array-Manipulation einer Abfrage mit mehreren Platzhaltern ermöglichen würde. Werte können nicht SQL-maskiert werden.
Platzhalter
Der Abfrageparameter für prepare akzeptiert sprintf()-ähnliche Platzhalter. Die Formate %s (String), %d (Integer) und %f (float) werden unterstützt. (Die Platzhalter %s und %d sind seit dem Hinzufügen der Funktion zu core in Version 2.3 verfügbar, %f ist erst seit Version 3.3 verfügbar.) Alle anderen %
-Zeichen können Analysefehler verursachen, es sei denn, sie werden maskiert. Alle %
-Zeichen in SQL-Zeichenfolgenliteralen, einschließlich Platzhaltern, müssen als %%
doppelt maskiert sein. Alle %d, %f und %s sind in der Abfragezeichenfolge ohne Anführungszeichen zu belassen. Beachten Sie, dass der Platzhalter %d nur Ganzzahlen akzeptiert, sodass Sie keine Zahlen mit Kommawerten über %d . Wenn Sie Kommawerte benötigen, verwenden Sie stattdessen %f als float.
Beispiele
Metaschlüssel hinzufügen => Wertepaar „Harriets Sprichwörter“ => „Die Datenbankschnittstelle von WordPress ist wie am Sonntagmorgen: Einfach.“ zu posten 10.
$metakey= "Harriet's Adages";$metavalue= "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );
Durchgeführt in WordPress von add_meta()
.
Dieselbe Abfrage mit vsprintf() -ähnlicher Syntax.
$metakey = "Harriet's Adages";$metavalue = "WordPress' database interface is like Sunday Morning: Easy.";$wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta( post_id, meta_key, meta_value )VALUES ( %d, %s, %s )", array(10, $metakey, $metavalue) ) );
Beachten Sie, dass wir in diesem Beispiel die Werte in einem Array zusammenfassen. Dies kann nützlich sein, wenn wir nicht wissen, wie viele Argumente wir bis zur Laufzeit übergeben müssen.
Beachten Sie, dass Sie sich keine Gedanken über das Zitieren von Zeichenfolgen machen müssen. Anstatt die Variablen direkt an die SQL-Abfrage zu übergeben, verwenden Sie einen %s
-Platzhalter für Zeichenfolgen, einen %d
-Platzhalter für Ganzzahlen und einen %f als Platzhalter für Gleitkommazahlen. Sie können beliebig viele Werte übergeben, jeder als neuer Parameter in der prepare()
-Methode.
SQL-Fehler ein- und ausblenden
Mit show_errors
und hide_errors
können Sie das Echo von Fehlern ein- und ausschalten.
<?php $wpdb->show_errors(); ?>
<?php $wpdb->hide_errors(); ?>
Sie können den Fehler (falls vorhanden), der von der letzten Abfrage generiert wurde, auch mit print_error
.
<?php $wpdb->print_error(); ?>
Hinweis: Wenn Sie WordPress Multisite ausführen, müssen Sie die Konstante DIEONDBERROR definieren, damit Datenbankfehler wie folgt angezeigt werden: <?php define( 'DIEONDBERROR', true ); ?>
Abrufen von Spalteninformationen
Mit get_col_info
können Sie Informationen zu den Spalten des letzten Abfrageergebnisses abrufen. Dies kann nützlich sein, wenn eine Funktion ein OBJEKT zurückgegeben hat, dessen Eigenschaften Sie nicht kennen. Die Funktion gibt die gewünschten Informationen aus der angegebenen Spalte oder ein Array mit Informationen zu allen Spalten aus dem Abfrageergebnis aus, wenn keine Spalte angegeben ist.
<?php $wpdb->get_col_info('type', offset); ?>
geben Sie (string) ein, welche Informationen Sie abrufen möchten. Kann einen der folgenden Werte annehmen (Liste aus den ezSQL-Dokumenten). Standardmäßig Name.
- name – Spaltenname. Standard.
- Tabelle – Name der Tabelle, zu der die Spalte gehört
- max_length – maximale Länge der Spalte
- not_null – 1 wenn die Spalte nicht NULL sein kann
- primary_key – 1 wenn die Spalte ein Primärschlüssel ist
- unique_key – 1 wenn die Spalte ein eindeutiger Schlüssel ist
- multiple_key – 1 wenn die Spalte ein nicht eindeutiger Schlüssel ist
- numeric – 1 wenn die Spalte numerisch ist
- blob – 1 wenn die Spalte ein BLOB ist
- type – der Typ der Spalte
- unsigned – 1 wenn die Spalte unsigned ist
- zerofill – 1 wenn die Spalte null ist -gefüllt
offset (integer) Geben Sie die Spalte an, aus der Informationen abgerufen werden sollen (wobei 0 die erste Spalte ist). Der Standardwert ist -1.
- -1 – Informationen aus allen Spalten abrufen. Ausgabe als Array. Standard.
- Nicht negative Ganzzahl – Informationen aus der angegebenen Spalte abrufen (0 ist die erste).
Cache leeren
Sie können den SQL-Ergebniscache mit flush
löschen.
<?php $wpdb->flush(); ?>
Dadurch werden $wpdb->last_result
, $wpdb->last_query
und $wpdb->col_info
gelöscht.
Klassenvariablen
$show_errors Gibt an, ob die Fehlerwiedergabe aktiviert ist oder nicht. Der Standardwert ist TRUE. $num_queries Die Anzahl der Abfragen, die ausgeführt wurden. $last_query Die letzte auszuführende Abfrage. $last_error Der letzte von MySQL generierte Fehlertext. $queries Sie können alle in der Datenbank ausgeführten Abfragen und deren Stoppzeiten speichern, indem Sie die Konstante SAVEQUERIES auf TRUE setzen (diese Konstante ist standardmäßig FALSE). Wenn SAVEQUERIES TRUE ist, werden Ihre Abfragen in dieser Variablen als Array gespeichert. $last_result Die neuesten Abfrageergebnisse. $col_info Die Spalteninformationen für die neuesten Abfrageergebnisse. Siehe Abrufen von Spalteninformationen. $insert_id ID, die für eine AUTO_INCREMENT-Spalte durch die letzte INSERT-Abfrage generiert wurde. $num_rows Die Anzahl der von der letzten Abfrage zurückgegebenen Zeilen. $prefix Das zugewiesene WordPress-Tabellenpräfix für die Site. $base_prefix Das ursprüngliche Präfix wie in wp-config definiert.PHP. Für Multi-Site: Verwenden Sie diese Option, wenn Sie das Präfix ohne angehängte Blog-Nummer erhalten möchten.
Multi-Site-Variablen
Wenn Sie Multi-Site verwenden, haben Sie auch Zugriff auf Folgendes:
$blogid Die ID der aktuellen Site (Blog). $siteid Die ID des aktuellen Netzwerks (früher „site“). WordPress unterstützt derzeit nur ein Netzwerk pro Multi-Site-Installation, aber das könnte sich in Zukunft ändern. Weitere Informationen finden Sie im Folgenden:
- WordPress: Unterschied zwischen site_id und blog_id?
- http://stackoverflow.com/a/4189358/1924128 – Eine weitere gute Antwort auf die gleiche Frage.
Tabellen
Die WordPress-Datenbanktabellen können in der wpdb
-Klasse problemlos referenziert werden.
$posts Die Tabelle der Beiträge. $postmeta Die Meta-Inhaltstabelle (auch bekannt als benutzerdefinierte Felder). $comments Die Kommentartabelle. $commentmeta Die Tabelle enthält zusätzliche Kommentarangaben. $termmeta Die Termmeta-Tabelle enthält die Term-Metawerte. $terms Die Termtabelle enthält die ‚Beschreibung‘ von Kategorien, Linkkategorien, Tags. $term_taxonomy Die Tabelle term_taxonomy beschreibt die verschiedenen Taxonomien (Termklassen). Kategorien, Linkkategorien und Tags sind Taxonomien. $term_relationships Die Term-Beziehungstabelle enthält eine Verknüpfung zwischen dem Term und dem Objekt, das diesen Term verwendet, d. h. diese Datei verweist auf jede Kategorie, die für jeden Beitrag verwendet wird. $users Die Tabelle der Benutzer. $usermeta Die usermeta-Tabelle enthält zusätzliche Benutzerinformationen wie Spitznamen, Beschreibungen und Berechtigungen. $links Die Tabelle der Links. $options Die Tabelle Optionen.
Multisite-Tabellen
Diese Tabellen werden nur in Multisite-Installationen verwendet.
$blogs Die Blogs-Tabelle enthält eine Liste der separaten Blogs (Sites), die innerhalb der Netzwerke eingerichtet wurden. $signups Die Tabelle Signups. $site Die Site-Tabelle enthält eine Liste der Netzwerke (früher in WPMU als „Sites“ bezeichnet), die in der Installation eingerichtet sind (normalerweise ist in dieser Tabelle nur ein Site aufgeführt). $sitemeta Die Tabelle Netzwerkoptionen (Site-Meta) enthält alle Optionen, die für die gesamte Multisite-Installation gelten. $sitecategories Die Tabelle der Websitekategorien. $registration_log Die Registrierungsprotokolltabelle. $blog_versions Die Blog-Versionstabelle.
Quelldatei
wpdb() befindet sich in wp-includes/wp-db.php
.
Verwandte
- Memberfunktion: wpdb::esc_like() – Escape LIKE-Anweisungen vor der Verwendung in SQL.
Artikel
- Artikel: Die Schleife – Ein grundlegender Überblick über die Verwendung von Abfragen in der WordPress-Schleife.
- Artikel: Abfrageübersicht – Erklärung, wie Sie bestimmen, welche Abfragen WordPress generieren.
- Artikel: Abfragen über Hook anpassen
- Artikel: Artikel anzeigen MYSQL-Abfrage mit benutzerdefinierten
- Artikel: Erweiterte Abfragen zu Taxonomien erstellen
- Artikel: Benutzerdefinierte Abfrage mit Offset und Paginierung erstellen
Code-Dokumentation
- Klasse: WP_Query – Detaillierte Übersicht der Klasse WP_Query
- Klasse: WP_Comment_Query – Klasse für kommentarbezogene Abfragen
- Klasse: WP_User_Query – Klasse für benutzerbezogene Abfragen
- Objekt: $wpdb – Überblick über die Verwendung des $wpdb-Objekts
- Funktion: set_query_var()
- Funktion: get_query_var()
- Funktion: query_posts() – Erstellen Sie eine zusätzliche benutzerdefinierte Abfrage
- Funktion: get_post() – Nehmen Sie eine ID eines Elements und geben Sie die Datensätze in der Datenbank für diesen Artikel 3202>
- Funktion: get_posts() – Eine spezialisierte Funktion, die ein Array von Elementen zurückgibt
- Funktion: get_pages() – Eine spezialisierte Funktion, die ein Array von Seiten zurückgibt
- Funktion: have_posts() – Eine Bedingung, die bestimmt, ob die Abfrage einen Artikel zurückgegeben hat
- Funktion: the_post() – Wird verwendet, um die Schleife nach einer Abfrage automatisch festzulegen
- Funktion: rewind_posts() – Löscht die aktuelle Schleife
- Funktion: setup_postdata() – Legt die Daten für ein einzelnes Abfrageergebnis innerhalb einer Schleife fest
- Funktion: wp_reset_postdata() – Stellt die vorherige Abfrage wieder her (normalerweise nach einer Schleife innerhalb einer anderen Schleife)
- Funktion: wp_reset_query()
- Funktion: is_main_query() – Stellt sicher, dass die Abfrage, die geändert wird, nur die Hauptabfrage ist
- Aktionshaken: pre_get_posts – Ändern Sie WordPress-Abfragen, bevor sie ausgeführt werden
- Aktionshaken: the_post – Ändern Sie das Post-Objekt nach der Abfrage
- Filterhaken: found_posts – Ändert den Wert des Objekts found_posts WP_Query