De-a lungul acestei serii, ne-am uitat la diferitele facilități care fac posibilă tratarea WordPress ca fundație pentru dezvoltarea aplicațiilor web.
Până acum, am acoperit o mulțime de teren:
În cele mai recente articole, am discutat despre cum să gestionăm interogările împotriva bazei de date WordPress prin utilizarea WP_Query
și WP_User_Query
.
În acest articol, vom discuta despre modul în care putem rula interogări SQL directe în baza de date.
Mai precis, vom analiza operațiunile standard pentru SELECTAȚI
, ACTUALIZAȚI
, INTRODUCE
, ȘTERGE
, și mai mult, vom examina exemplele fiecăruia. Apoi, vom finaliza discuția noastră vorbind despre parametrizare, astfel încât să putem scrie interogări sigure.
Cu acest lucru, să ne uităm la operațiunile disponibile, la exemplele fiecăruia, și cum le putem încorpora în munca noastră.
Pentru cei dintre voi care sunt noi în scrierea interogărilor SQL, atunci este important să înțelegeți termenii pentru fiecare dintre tipurile de interogări pe care le facem pentru a fi executate. în primul rând, vorbim despre SELECTAȚI
afirmație.
Pur și simplu pune, SELECTAȚI
declarațiile sunt responsabile pentru regăsirea datele din baza de date, astfel încât să putem citi informațiile.
Unul dintre exemplele cele mai de bază pe care le putem oferi este cum să preluăm un titlu post de la wp_posts
masa:
// Întotdeauna globalizați $ wpdb global $ wpdb; // Selectați o singură variabilă - titlul postului din primul post $ title = $ wpdb-> get_var ("SELECT post_title FROM $ wpdb-> posturi WHERE ID = 1;"); echo $ title;
Cu toate acestea, presupunem că sunteți familiarizat cu schema bazei de date, dar am acoperit acest lucru în articolele anterioare.
Desigur, în contextul WordPress, nu putem să definim o interogare și să o executăm - în schimb, trebuie să ne asigurăm că o transmitem API-ului corect. introduce $ wpdb
.
Direct de la Codex:
WordPress oferă o variabilă globală, $ wpdb, care este o instanțiere a clasei deja setată pentru a vorbi cu baza de date WordPress.
Obiectul $ wpdb poate fi folosit pentru a citi datele din orice tabel din baza de date WordPress (cum ar fi tabelele plugin personalizate), nu doar tabelele standard create de WordPress.
Deci, există o avertizare aici, pe care nu am întâlnit-o încă în lucrarea noastră până în acest punct: The $ wpdb
variabila globala este globala ceea ce inseamna ca ori de cate ori dorim sa accesam aceasta, trebuie sa ne asiguram ca prefixam global
înainte de aceasta.
global $ wpdb; // Selectați un întreg șir de informații din primul mesaj $ info = $ wpdb-> get_row ("SELECT * FROM $ wpdb-> posts WHERE ID = 1;"); print_r ($ info); // Obțineți toate titlurile postărilor (și paginile și tipurile de posturi personalizate) care au un ID mai mic de 10 titluri $ = $ wpdb-> get_col ("SELECT post_title FROM $ wpdb-> posturi 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 ("SELECT ID, post_title din $ wpdb-> mesaje WHERE ID < 10;" ); print_r( $results );
Dacă acest lucru este nou pentru dvs., nu vă faceți griji - vom analiza exact cum să faceți acest lucru în acest articol.
Cei mai avansați sunt mai mult decât capabili să se ocupe de întrebări mai complexe.
Rețineți, de asemenea, că toate interogările sunt stabilite între ghilimele duble. Acest lucru este astfel încât să putem folosi$ wpdb
variabilă în șir și nu trebuie să efectueze nici o concatenare a șirului care ar putea complica modul în care arată codul. În plus, țineți seama de ce tip de interogări returnează variabilele unice și ce tip de interogări returnează colecțiile, deoarece acestea vor dicta modul în care puteți gestiona informațiile după ce acestea sunt preluate. Poate că o reciti înapoi la pagină, sau poate că vei termina prin ea.
Desigur, recuperarea informațiilor nu este decât unu modul în care datele sunt gestionate în baza de date WordPress. La urma urmei, pentru a prelua ceva, trebuie să aveți date care sunt efectiv stocate în tabelele bazei de date.
Cu toate că API-ul WordPress face acest lucru relativ ușor de făcut dintr-o perspectivă de programare (mai ales prin utilizarea unor API-uri pe care tocmai le-am revăzut în ultimele două articole), pot exista momente în care scrierea propriilor dvs. interogări pentru inserarea informațiilor este mod de a merge.
Rețineți că în toate exemplele pe care le vom examina, analizăm câteva întrebări relativ simple. Acest lucru este făcut pentru ca cei dintre voi care nu au scris niciodată SQL în contextul WordPress (sau în orice context, într-adevăr) pot urmări cu ușurință.
Introducerea datelor este ceva ce trebuie făcut cu grijă, nu doar pentru că scrieți tabelul la unul (sau mai multe) tabele, ci pentru că doriți să vă asigurați că nu vă veți ciocni cu datele deja existente.
Deși bazele de date pot avea restricții care vă permit să faceți acest lucru, consider că este întotdeauna sigur să luați măsuri preventive la nivel de cod pentru a verifica dacă există ceva înainte de al introduce. În acest fel, puteți efectua o actualizare mai degrabă decât o inserție (pe care o vom examina momentan).
Dar dacă sunteți sigur (ă) că sunteți gata să introduceți informații, iată câteva exemple pentru a începe.
global $ wpdb; // În tabelul de postări, inserați un post publicat cu un titlu și un conținut cu ID-ul arbitrar al postului de 9999 $ wpdb-> insert ('wp_posts', array ('id' => 9999, 'post_title' => ',' post_status '=>' publica ',' post_content '=>' Exemplu de conținut pentru o postare introdusă prin interogare directă '), array ('% d ','% s ' '));
Ca și în cazul SELECTAȚI
interogări, aceste exemple sunt concepute pentru a fi începători de bază, ar trebui să le poată prelua cu ușurință, utilizatorii avansați ar trebui să înțeleagă cum să facă acest lucru la nivelul următor, cu un efort foarte mic.
Așa cum am menționat în ultima secțiune, pot exista momente în care vrem să actualizăm datele în loc să inserăm date noi. În astfel de cazuri, căutăm de fapt ACTUALIZAȚI
deoarece acest lucru ne va permite să luăm un șir de informații existente, să actualizăm datele și apoi să le salvăm în baza de date.
În esență, acest lucru este ideal în cazurile în care existent informațiile trebuie să fie optimizate.
global $ wpdb; // Actualizați titlul și conținutul postului pentru hârtia de rând pentru postarea tabelului are ID-ul de 9999 $ wpdb-> update ('wp_posts', array ('post_title' => 'Inserted Post (Actualizat)', 'post_content' "% D", "% s", "% s"), array ("% d" ));
Desigur, acest lucru ne conduce la o altă operațiune - dacă nu căutăm să citim informații, să inserăm informații sau să actualizăm informațiile, atunci ce altceva facem să facem?
ȘTERGE
este ceea ce face posibilă eliminarea directă a datelor din baza de date fără a utiliza API-urile WordPress. Puterea în acest sens este că puteți trece prin funcțiile și condiționalitățile obișnuite care pot fi necesare pentru a elimina informațiile.
Dezavantajul este totuși că poate fi periculos să elimini direct informațiile din baza de date, deoarece fără verificări corecte și codare defensivă, atunci când datele au dispărut, a dispărut pentru totdeauna.
global $ wpdb; // Ștergeți înregistrarea din baza de date unde coloana ID are valoarea 9999 $ wpdb-> delete ('wp_posts', array ('ID' => 9999), array ('% d'));
Pe măsură ce ne-am uitat la aceste operațiuni, am văzut cum putem lucra cu baza de date direct prin trecerea sau evitarea API-ului (în funcție de modul în care doriți să îl priviți), dar ultimul lucru pe care trebuie să-l luăm uita-te este exact cum să vă asigurați că scriem cele mai sigure întrebări pe care le putem.
Până în prezent, am transmis datele în interogări în linie - aceasta înseamnă că de fiecare dată când am inserat sau am actualizat date în baza de date, am făcut-o fără a scăpa corespunzător.
Dacă nu gestionăm aceste tipuri de condiții cu grijă, atunci se lasă ușa deschisă pentru ca mai mulți utilizatori rău-intenționați să profite de codul nostru și să introducă potențial date dăunătoare în tabelele bazei de date.
Deci, cum împiedicăm acest lucru să se întâmple? Pe scurt, le folosim a pregati
funcția care există pe $ wpdb
obiect și folosim opțiuni de reprezentare pentru a reprezenta informațiile noastre. Desigur, cel mai simplu mod de a înțelege acest lucru este să îl vedeți în acțiune, deci să aruncăm o privire la câteva exemple.
global $ wpdb; $ id = 10000; $ title = "Un post parametrizat"; $ content = "Această postare a fost inserată utilizând o interogare parametrizată."; $ parametrized_result = $ wpdb-> interogare ($ wpdb-> prepare ("INSERT INTO $ wpdb-> posts (id, post_title, post_content) VALUES (% d,% s,% s) , conținut $)));
Acum, dacă ați urmărit îndeaproape împreună cu restul informațiilor din acest articol, atunci ați văzut deja funcționalități similare de substituire, cum ar fi % s
, % d
, și așa mai departe, fiecare reprezentând un șir și respectiv un număr.
Diferitele, în acest caz, constă în faptul că nu numai că stocăm valorile noastre în variabile înainte de a le trimite la interogare, ci și că transmitem întreaga interogare în a pregati
care va prelua interogarea și va executa o evadare SQL corespunzătoare a datelor, pentru a ne asigura că am pregătit corect interogări securizate.
WordPress Codex-ul are un articol în detaliu despre Validarea Datelor, care ar trebui citit de oricine lucrează la plugin-uri, teme și aplicații. De fapt, vă recomand să citiți acest articol după acest post special, deoarece acesta va expune informațiile pe care le-am discutat aici.
Acest articol este menit să servească drept bază pentru a direcționa interogările bazei de date WordPress - nu înseamnă în nici un caz să fie un ghid exhaustiv; cu toate acestea, prin familiarizarea cu informațiile de aici, citirea restului materialului din Codex și practicarea acestor întrebări în propria dvs. lucrare, vă voi vă în continuare abilitățile, deoarece se referă la lucrul cu baza de date de bază.
În următorul articol, vom încheia această serie examinând tot ceea ce am vorbit în ultimele articole, precum și cum să progresăm cu viitoarele proiecte - sau aplicații - acum că am aruncat o privire la tot ceea ce WordPress are de oferit.