In dieser ganzen Serie haben wir uns die verschiedenen Möglichkeiten angesehen, die es ermöglichen, WordPress als Grundlage für die Entwicklung von Webanwendungen zu behandeln.
Bis jetzt haben wir viel Boden hinter uns gebracht:
In den neuesten Artikeln haben wir einen Blick darauf gerichtet, wie Abfragen gegen die WordPress-Datenbank durch die Verwendung von durchgeführt werden WP_Query
und WP_User_Query
.
In diesem Artikel werden wir die Diskussion abrunden, indem wir darüber sprechen, wie wir direkte SQL-Abfragen für die Datenbank ausführen können.
Insbesondere werden wir uns die Standardoperationen für anschauen WÄHLEN
, AKTUALISIEREN
, EINFÜGEN
, LÖSCHEN
, und mehr, wir werden uns jeweils Beispiele ansehen. Anschließend schließen wir unsere Diskussion ab, indem wir über die Parametrisierung sprechen, damit wir sichere Abfragen schreiben können.
Schauen wir uns nun die verfügbaren Operationen an, Beispiele für jede davon und wie wir sie in unsere Arbeit integrieren können.
Für diejenigen unter Ihnen, die mit dem Schreiben von SQL-Abfragen noch nicht vertraut sind, ist es wichtig, die Bedingungen für die einzelnen Abfragetypen zu verstehen, die wir ausführen. Zuerst reden wir über das WÄHLEN
Aussage.
Einfach gesagt, WÄHLEN
Aussagen sind dafür verantwortlich abrufen Daten aus der Datenbank, damit wir die Informationen lesen können.
Eines der grundlegendsten Beispiele, die wir geben können, ist das Abrufen eines Posttitels aus der wp_posts
Tabelle:
// Immer globalisieren $ wpdb global $ wpdb; // Wähle eine einzelne Variable - den Titel des ersten Beitrags $ title = $ wpdb-> get_var ("SELECT post_title FROM $ wpdb-> posts WHERE ID = 1;"); echo $ title;
Zugegeben, dies setzt voraus, dass Sie mit dem Datenbankschema vertraut sind, aber wir haben dies in früheren Artikeln behandelt.
Natürlich können wir im Rahmen von WordPress nicht einfach eine Abfrage definieren und ausführen lassen. Stattdessen müssen wir sicherstellen, dass wir sie an die richtige API übergeben. Eingeben $ wpdb
.
Direkt aus dem Kodex:
WordPress bietet eine globale Variable, $ wpdb, die eine Instantiierung der Klasse ist, die bereits für die Kommunikation mit der WordPress-Datenbank eingerichtet ist.
Das $ wpdb-Objekt kann verwendet werden, um Daten aus einer beliebigen Tabelle in der WordPress-Datenbank (z. B. benutzerdefinierte Plug-In-Tabellen) zu lesen, nicht nur aus den von WordPress erstellten Standardtabellen.
Daher gibt es hier einen Vorbehalt, dem wir in unserer bisherigen Arbeit noch nicht begegnet sind: The $ wpdb
Die globale Variable ist global. Das bedeutet, dass wir immer, wenn wir darauf zugreifen wollen, sicherstellen müssen, dass wir das voranstellen global
Schlüsselwort davor.
global $ wpdb; // Wähle eine ganze Reihe von Informationen aus dem ersten Beitrag aus $ info = $ wpdb-> get_row ("SELECT * FROM $ wpdb-> posts WHERE ID = 1;"); print_r ($ info); // Alle Titel von Beiträgen (und Seiten und benutzerdefinierte Beitragstypen) abrufen, die eine ID von weniger als 10 $ title = $ wpdb-> get_col ("SELECT post_title FROM $ wpdb-> - Posts WHERE ID") haben < 10;" ); print_r( $titles ); // Retrieve a generic result set of post IDs and post titles from the posts table where posts have an ID less than 10 $results = $wpdb->get_results ("SELECT ID, post_title FROM $ wpdb-> gibt die WO-ID aus < 10;" ); print_r( $results );
Wenn dies für Sie neu ist, keine Sorge - wir werden uns in diesem Artikel genau ansehen, wie das geht.
Diejenigen, die fortgeschrittener sind, sind mehr als in der Lage, komplexere Abfragen zu bearbeiten.
Beachten Sie auch, dass alle Abfragen in Anführungszeichen gesetzt werden. Dies ist so, dass wir die verwenden können$ wpdb
Variable innerhalb der Zeichenfolge und muss keine Zeichenfolgenverkettung durchführen, die die Darstellung des Codes erschweren kann. Beachten Sie außerdem, welche Art von Abfragen einzelne Variablen zurückgeben und welche Art von Abfragen Auflistungen zurückgeben, da dies vorschreibt, wie Sie die Informationen verwalten können, sobald sie abgerufen wurden. Vielleicht wiederholen Sie es wieder auf der Seite, oder Sie laufen vielleicht durch die Seite.
Natürlich ist das Abrufen von Informationen aber ein Art und Weise, wie Daten in der WordPress-Datenbank verwaltet werden. Um etwas abzurufen, müssen Sie über Daten verfügen, die tatsächlich in den Datenbanktabellen gespeichert sind.
Obwohl die WordPress-API dies aus Programmiersicht relativ einfach macht (insbesondere durch die Verwendung einiger der APIs, die wir gerade in den letzten beiden Artikeln überprüft haben), kann es manchmal vorkommen, dass Sie Ihre eigenen Abfragen zum Einfügen von Informationen schreiben weiter so.
Beachten Sie, dass wir in allen Beispielen, die wir betrachten werden, einige relativ einfache Abfragen betrachten. Dies geschieht, damit diejenigen von Ihnen, die noch nie SQL im Kontext von WordPress (oder in einem beliebigen Kontext) geschrieben haben, problemlos folgen können.
Das Einfügen von Daten muss mit Vorsicht erfolgen, nicht nur, weil Sie Tabellen in eine (oder mehrere) Tabellen schreiben, sondern weil Sie sicherstellen möchten, dass Sie nicht mit bereits vorhandenen Daten kollidieren.
Obwohl Datenbanken Einschränkungen haben können, die dies ermöglichen, ist es meines Erachtens immer sicher, auf Codeebene präventive Maßnahmen zu ergreifen, um vor dem Einfügen zu prüfen, ob etwas vorhanden ist. Auf diese Weise können Sie ein Update anstelle eines Inserts durchführen (was wir uns kurz ansehen)..
Wenn Sie sich jedoch sicher sind, dass Sie zum Einfügen von Informationen bereit sind, folgen hier einige Beispiele, um den Einstieg zu erleichtern.
global $ wpdb; // In die Posts-Tabelle fügen Sie einen veröffentlichten Post mit Titel und Inhalt mit der beliebigen Post-ID von 9999 ein. $ Wpdb-> insert ('wp_posts', array ('id' => 9999, 'post_title' => 'Inserted Post ',' post_status '=>' publish ',' post_content '=>' Beispielinhalt für einen Beitrag, der über eine Direktabfrage eingefügt wurde. '), array ('% d ','% s ','% s ','% s '));
Genau wie bei der WÄHLEN
Abfragen, diese Beispiele sind als Basis gedacht - Anfänger sollten in der Lage sein, sie leicht zu erlernen, fortgeschrittene Benutzer sollten verstehen, wie sie dies mit sehr wenig Aufwand auf die nächste Stufe bringen können.
Wie im letzten Abschnitt erwähnt, kann es Zeiten geben, in denen wir Daten aktualisieren möchten, anstatt neue Daten einzufügen. In solchen Fällen suchen wir tatsächlich nach dem AKTUALISIEREN
Dieser Vorgang ermöglicht es uns, eine vorhandene Informationszeile zu übernehmen, die Daten zu aktualisieren und sie dann in der Datenbank zu speichern.
Dies ist im Wesentlichen ideal für Fälle, in denen bestehender Informationen müssen angepasst werden.
global $ wpdb; // Aktualisieren Sie den Titel und den Beitragsinhalt der Beitragstabellenzeile. Hat die ID 9999 $ wpdb-> update ('wp_posts', array ('post_title' => 'Inserted Post (Updated)', 'post_content' => 'Beispielinhalt für einen Beitrag * aktualisiert * über direkte Abfrage.'), Array ('id' => 9999), Array ('% d', '% s', '% s'), Array ('% d' ));
Natürlich führt uns dies zu einer weiteren Operation. Wenn wir keine Informationen lesen, Informationen einfügen oder Informationen aktualisieren möchten, dann wollen wir noch etwas tun?
Das LÖSCHEN
Die Operation ermöglicht es uns, Daten direkt aus der Datenbank zu entfernen, ohne eine der WordPress-APIs zu verwenden. Die Stärke dabei ist, dass Sie die üblichen Funktionen und Bedingungen umgehen können, die zum Entfernen von Informationen erforderlich sind.
Der Nachteil ist jedoch, dass es gefährlich sein kann, Informationen direkt aus der Datenbank zu entfernen, denn ohne ordnungsgemäße Überprüfung und defensive Kodierung sind die Daten, sobald sie verschwunden sind, endgültig weg.
global $ wpdb; // Lösche den Datensatz aus der Datenbank, wobei die ID-Spalte den Wert 9999 hat. $ Wpdb-> delete ('wp_posts', array ('ID' => 9999), array ('% d'));
Während wir uns diese Vorgänge angesehen haben, haben wir gesehen, wie wir direkt mit der Datenbank arbeiten können, indem wir die API (je nachdem, wie Sie sie betrachten möchten) umstellen oder die API meiden, aber das Letzte, was wir brauchen Sehen Sie sich an, wie Sie sicherstellen können, dass wir die sichersten Abfragen schreiben, die wir nur können.
Bis zu diesem Zeitpunkt haben wir Daten an die Abfragen inline übergeben. Dies bedeutet, dass wir jedes Mal, wenn wir Daten in die Datenbank eingefügt oder aktualisiert haben, dies ohne ordnungsgemäße Escape-Funktion getan haben.
Wenn wir mit solchen Bedingungen nicht vorsichtig umgehen, können böswillige Benutzer die Möglichkeit haben, unseren Code zu nutzen und möglicherweise bösartige Daten in die Datenbanktabellen einzuspeisen.
Wie verhindern wir das? Kurz gesagt, wir nutzen das bereiten
Funktion, die auf der existiert $ wpdb
Objekt, und wir verwenden Platzhalter, um unsere Informationen darzustellen. Natürlich können wir dies am einfachsten verstehen, wenn wir es in Aktion sehen. Schauen wir uns also einige Beispiele an.
global $ wpdb; $ id = 10000; $ title = "Ein parametrisierter Beitrag"; $ content = "Dieser Beitrag wurde mit einer parametrisierten Abfrage eingefügt."; $ parameterized_result = $ wpdb-> query ($ wpdb-> prepare ("INSERT INTO wpdb-> posts (id, post_title, post_content) VALUES (% d,% s,% s)", Array ($ id, $ title) , $ content)));
Wenn Sie nun die übrigen Informationen in diesem Artikel genau verfolgt haben, haben Sie bereits eine ähnliche Substitutionsfunktion wie z % s
, % d
, und so weiter, von denen jede eine Zeichenfolge bzw. eine Zahl darstellt.
Der Unterschied besteht in diesem Fall darin, dass wir unsere Werte nicht nur in Variablen speichern, bevor sie an die Abfrage übergeben werden, sondern auch die gesamte Abfrage an die Abfrage übergeben bereiten
Diese Funktion nimmt die Abfrage und führt ein ordnungsgemäßes SQL-Escaping für die Daten aus, um sicherzustellen, dass ordnungsgemäß vorbereitete, sichere Abfragen erstellt werden.
Der WordPress-Codex enthält einen ausführlichen Artikel zur Datenvalidierung, der von jedem gelesen werden sollte, der an Plugins, Designs und Anwendungen arbeitet. In der Tat empfehle ich, das nach diesem Beitrag zu lesen, da er auf die Informationen eingehen wird, die wir hier besprochen haben.
Dieser Artikel soll als Leitfaden für die Abfrage von WordPress-Datenbankabfragen dienen - er ist keinesfalls als erschöpfender Leitfaden gedacht. Wenn Sie sich jedoch mit den Informationen vertraut machen, die hier enthalten sind, lesen Sie den Rest des Materials im Codex und üben Sie diese Fragen in Ihrer eigenen Arbeit werden fördern Sie Ihre Fähigkeiten in Bezug auf die Arbeit mit der zugrunde liegenden Datenbank.
Im nächsten Artikel werden wir diese Serie zusammenfassen, indem wir alles, was wir in den letzten Artikeln besprochen haben, durchsehen und wie Sie mit zukünftigen Projekten oder Anwendungen fortfahren können, nachdem wir uns das angesehen haben bei allem, was WordPress zu bieten hat.