In questa serie, abbiamo esaminato le varie strutture che rendono possibile trattare WordPress come base per lo sviluppo di applicazioni web.
Finora, abbiamo coperto molto terreno:
Negli articoli più recenti, abbiamo parlato di come gestire le query sul database di WordPress attraverso l'uso di WP_Query
e WP_User_Query
.
In questo articolo, andremo a completare la discussione parlando di come possiamo eseguire query SQL dirette sul database.
Nello specifico, esamineremo le operazioni standard per SELEZIONARE
, AGGIORNARE
, INSERIRE
, ELIMINA
, e altro ancora, daremo un'occhiata agli esempi di ciascuno. Quindi, completeremo la nostra discussione parlando della parametrizzazione in modo da poter scrivere query sicure.
Detto questo, esaminiamo le operazioni disponibili, esempi di ciascuno e come possiamo incorporarli nel nostro lavoro.
Per quelli di voi che sono nuovi alla scrittura di query SQL, quindi è importante comprendere i termini per ciascuno dei tipi di query che stiamo facendo per essere in esecuzione. per prima cosa, stiamo parlando del SELEZIONARE
dichiarazione.
In poche parole, SELEZIONARE
le dichiarazioni sono responsabili per recupero dati dal database in modo che possiamo leggere le informazioni.
Uno degli esempi più elementari che possiamo dare è come recuperare un titolo del post dal wp_posts
tavolo:
// globalizza sempre $ wpdb global $ wpdb; // Seleziona una singola variabile: il titolo del post del primo post $ title = $ wpdb-> get_var ("SELECT post_title FROM $ wpdb-> posts WHERE ID = 1;"); echo $ title;
Certo, questo presuppone che tu abbia familiarità con lo schema del database, ma lo abbiamo trattato in articoli precedenti.
Ovviamente, nel contesto di WordPress, non possiamo semplicemente definire una query e farla eseguire, ma dobbiamo assicurarci che la passiamo all'API corretta. accedere $ wpdb
.
Direttamente dal codice:
WordPress fornisce una variabile globale, $ wpdb, che è un'istanza della classe già impostata per parlare al database di WordPress.
L'oggetto $ wpdb può essere utilizzato per leggere i dati da qualsiasi tabella nel database di WordPress (come le tabelle di plugin personalizzate), non solo le tabelle standard create da WordPress.
Quindi c'è un avvertimento qui che non abbiamo ancora incontrato nel nostro lavoro fino a questo punto: The $ wpdb
la variabile globale è globale, il che significa che ogni volta che vogliamo accedervi, dobbiamo assicurarci di prefissare il prefisso globale
parola chiave prima di esso.
globale $ wpdb; // Seleziona un'intera riga di informazioni dal primo post $ info = $ wpdb-> get_row ("SELECT * FROM $ wpdb-> posts WHERE ID = 1;"); print_r ($ info); // Ottieni tutti i titoli di post (e pagine e tipi di post personalizzati) con un ID inferiore a 10 $ title = $ wpdb-> get_col ("SELECT post_title FROM $ wpdb-> post WHERE ID < 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 ("ID SELECT, post_title FROM $ wpdb-> post WHERE ID < 10;" ); print_r( $results );
Se questo è nuovo per te, non preoccuparti, daremo un'occhiata esattamente a come farlo in questo articolo.
Coloro che sono più avanzati sono più che in grado di gestire query più complesse.
Si noti inoltre che tutte le query sono impostate tra virgolette doppie. Questo è così che possiamo usare il$ wpdb
variabile all'interno della stringa e non deve eseguire alcuna concatenazione di stringhe che possa complicare il modo in cui il codice appare. Inoltre, fai attenzione a quale tipo di query restituiscono singole variabili e quale tipo di query restituisce le raccolte in quanto ciò determinerà come poter gestire le informazioni una volta recuperate. Forse lo fai tornare alla pagina, o forse finisci per passarci sopra.
Naturalmente, il recupero delle informazioni è ma uno modo in cui i dati sono gestiti all'interno del database di WordPress. Dopotutto, per recuperare qualcosa, devi disporre di dati effettivamente archiviati nelle tabelle del database.
Anche se l'API di WordPress rende questo relativamente facile da fare da una prospettiva di programmazione (specialmente attraverso l'uso di alcune delle API che abbiamo appena esaminato negli ultimi due articoli), potrebbero esserci delle volte in cui scrivere le proprie query per inserire informazioni è il ben fatto.
Nota che in tutti gli esempi che guarderemo, daremo un'occhiata ad alcune query relativamente semplici. Questo è fatto in modo che quelli di voi che non hanno mai scritto SQL nel contesto di WordPress (o in qualsiasi contesto, davvero) siano in grado di seguire facilmente.
L'inserimento di dati è qualcosa che deve essere fatto con cura, non semplicemente perché stai scrivendo una tabella su una (o più) tabelle, ma perché vuoi assicurarti che non abbia intenzione di entrare in collisione con i dati già esistenti.
Sebbene i database possano avere restrizioni che consentono di fare ciò, trovo che sia sempre sicuro adottare misure preventive a livello di codice per, per esempio, controllare se esiste qualcosa prima di inserirlo. In questo modo, puoi eseguire un aggiornamento piuttosto che un inserto (che daremo un'occhiata momentaneamente).
Ma se sei sicuro di essere pronto per inserire informazioni, ecco un esempio per iniziare.
globale $ wpdb; // Nella tabella dei post, inserisci un post pubblicato con un titolo e un contenuto con l'ID del post arbitrario di 9999 $ wpdb-> insert ('wp_posts', array ('id' => 9999, 'post_title' => 'Post inserito ',' post_status '=>' pubblica ',' post_content '=>' Contenuto di esempio per un post inserito tramite query diretta. '), array ('% d ','% s ','% s ','% s '));
Proprio come con il SELEZIONARE
domande, questi esempi sono pensati per essere fondamentali: i principianti dovrebbero essere in grado di coglierli facilmente, gli utenti avanzati dovrebbero capire come portarli al livello successivo con uno sforzo minimo.
Come accennato nell'ultima sezione, ci possono essere momenti in cui vogliamo aggiornare i dati piuttosto che inserire nuovi dati. In casi come questo, stiamo davvero cercando il AGGIORNARE
operazione in quanto ciò ci consentirà di prendere una riga di informazioni esistente, aggiornare i dati e quindi salvarli nel database.
Essenzialmente, questo è l'ideale nei casi in cui esistente le informazioni devono essere ottimizzate.
globale $ wpdb; // Aggiorna il titolo e il contenuto del post del cappello di riga della tabella post ha l'ID di 9999 $ wpdb-> update ('wp_posts', array ('post_title' => 'Post inserito (aggiornato)', 'post_content' => 'Contenuto di esempio per un post * aggiornato * tramite query diretta.'), Array ('id' => 9999), array ('% d', '% s', '% s'), array ('% d' ));
Naturalmente, questo ci porta ad un'altra operazione: se non stiamo cercando di leggere informazioni, inserire informazioni o aggiornare le informazioni, allora che altro stiamo cercando di fare?
Il ELIMINA
operazione è ciò che rende possibile per noi rimuovere i dati dal database direttamente senza utilizzare alcuna delle API di WordPress. Il potere nel fare questo è che si è in grado di passare le solite funzioni e condizionali che potrebbero essere necessari per rimuovere le informazioni.
Il rovescio della medaglia, tuttavia, è che può essere pericoloso rimuovere direttamente le informazioni dal database, perché senza controlli adeguati e codifica difensiva, quindi una volta che i dati sono andati, è andato per sempre.
globale $ wpdb; // Elimina il record dal database in cui la colonna ID ha il valore 9999 $ wpdb-> delete ('wp_posts', array ('ID' => 9999), array ('% d'));
Come abbiamo visto in queste operazioni, abbiamo visto come possiamo lavorare direttamente con il database scavalcando o evitando l'API (a seconda di come la si vuole vedere), ma l'ultima cosa che dobbiamo fare è guardare è esattamente come assicurarsi che stiamo scrivendo le query più sicure che possiamo.
Fino a questo punto, abbiamo passato i dati alle query in linea, questo significa che ogni volta che abbiamo inserito o aggiornato i dati nel database, lo abbiamo fatto senza evitarli correttamente.
Se non gestiamo questo tipo di condizioni con attenzione, lascia la porta aperta a un maggior numero di utenti malintenzionati di sfruttare il nostro codice e potenzialmente immettere dati dannosi nelle tabelle del database.
Quindi, come impediamo che ciò accada? In breve, sfruttiamo il preparare
funzione che esiste sul $ wpdb
oggetto, e usiamo segnaposti per rappresentare le nostre informazioni. Naturalmente, il modo più semplice per comprenderlo è vederlo in azione, quindi diamo un'occhiata ad alcuni esempi.
globale $ wpdb; $ id = 10000; $ title = "Un post parametrizzato"; $ content = "Questo post è stato inserito utilizzando una query con parametri."; $ parameterized_result = $ wpdb-> query ($ wpdb-> prepare ("INSERT INTO $ wpdb-> posts (id, post_title, post_content) VALORI (% d,% s,% s)", array ($ id, $ title , $ contenuto)));
Ora, se hai seguito da vicino insieme al resto delle informazioni in questo articolo, hai già visto funzionalità simili di sostituzione come %S
, % d
, e così via, ognuna delle quali rappresenta rispettivamente una stringa e un numero.
Il diverso, in questo caso, è che non stiamo solo memorizzando i nostri valori nelle variabili prima di passarli alla query, ma stiamo anche passando l'intera query nel preparare
funzione che prenderà la query ed eseguirà la corretta escaping SQL sui dati per garantire che abbiamo query correttamente preparate e sicure.
Il Codice WordPress contiene un articolo approfondito sulla convalida dei dati che dovrebbe essere letto da chiunque lavori su plugin, temi e applicazioni. In effetti, raccomando di leggere questo dopo questo particolare post in quanto esporrà le informazioni che abbiamo discusso qui.
Questo articolo ha lo scopo di servire da base per indirizzare le query del database di WordPress - non è affatto inteso come una guida esauriente; tuttavia, familiarizzando con le informazioni che sono qui, leggendo il resto del materiale nel Codex e praticando queste query nel tuo lavoro, volontà ulteriormente le tue abilità in relazione al lavoro con il database sottostante.
Nel prossimo articolo, concluderemo questa serie rivedendo tutto ciò di cui abbiamo parlato negli ultimi articoli, nonché come andare avanti con i progetti futuri o le applicazioni, ora che abbiamo dato un'occhiata a tutto ciò che WordPress ha da offrire.