Kui olete jõudnud mõne postituse läbi, mille olen kirjutanud viimase, näiteks kahe aasta jooksul, leiate tõenäoliselt peaaegu iga kord, kui ma propageerin saadaolevate API-de kasutamist kataloogide andmebaasi päringute puhul.
Ja tõde on see, et ma kaldun endiselt sellesse suunda. See tähendab, et kui millegi konkreetse tegemiseks on saadaval abstraktsioon või API, siis proovin seda kasutada.
Kuid paaris hiljutises projektis olen töötanud suhteliselt suurte andmekogumitega (suured võrreldes mitteettevõtte tasandi andmekogumitega). Ja seda tehes olen püüdnud tagada, et andmete värskendused toimuksid võimalikult kiiresti.
Sellistes olukordades, kuigi WordPressi kodeerimisstandarditele see ei meeldi, leian, et mõnikord on andmebaasi otsepäringud teatud tingimustel parim valik.
Andmebaasi otsepäringute kasutamine
Otsesed andmebaasipäringud on üks neist asjadest, millel on WordPressi arendajate seas pisut segane maine:
- nad on kodeerimisstandardites heidutatud,
- WordPress pakub juurdepääsu otse andmebaasile $wpdb kaudu,
- andmebaasipäringutes on nüansse, millest tuleks aru saada.
Nii et kui näete midagi sellist :
<?php
private function set_all_scheduled_events_as_public() {
global $wpdb;
// @codingStandardsIgnoreStart
$wpdb->query(
$wpdb->prepare(
"
UPDATE $wpdb->posts
SET post_status = '%s'
WHERE post_type = '%s'
AND post_status = '%s'
",
'publish',
'tribe_events',
'future') );
// @codingStandardsIgnoreEnd
}
Kuidas sa tead, kas see on hea samm või mitte? Ja veel parem, kuidas teate, kas peaksite oma koodis kasutama kataloogiandmebaasi päringuid?
Neid küsimusi käsitledes esitan tavaliselt endalt mõned allpool esitatud küsimused.
1 Kas veergudel on indeksid?
Enne otseste andmebaasipäringute kasutamist WordPressis kontrollige, kas veergudel, mille kohta päringuid esitan, on nendel veergudel indeksid.
Ja põhjus on järgmine :
Indekseid kasutatakse andmete kiireks leidmiseks, ilma et oleks vaja otsida andmebaasi tabeli igalt realt iga kord, kui andmebaasi tabelile juurde pääseb.
Põhimõte on see, et veergude päringute ja värskendamise kiirus on kiirem, kui veergudel on indeksid.
Otsesed andmebaasipäringud sõltuvad andmebaasi struktuurist.
Selleks ei peaks me seda pidevalt tegema. Kuid on aegu, mil see on asjakohane (näiteks metaväärtuste komplekti värskendamisel) ja millal mitte.
2 Parameetristage oma päringud
Otseste andmebaasipäringute kasutamisel on turvalisuse huvides äärmiselt oluline päringute parameetrite määramine. Seda kõike saate lugeda Codexist ja see ei ole midagi, mida vahele jätta.
Otse dokumentatsioonist :
Täielikuma ülevaate saamiseks SQL-i põgenemisest WordPressis vaadake andmebaasi andmete valideerimine. See on kohustuslik lugemine kõigile WordPressi koodi kaasautoritele ja pistikprogrammide autoritele.
See tähendab, et kui kasutate kasutaja sisendit, peate veenduma, et see on puhastatud, puhas ja valmis andmebaasi sisestamiseks. Kuid mis see väärt on, ei luba ma peaaegu kunagi, et kasutaja sisend mõjutab otseseid andmebaasipäringuid.
Selle asemel põhinevad need tavaliselt andmetel, mis mul koodis on ja mida soovin värskendada või muuta, kui need on ohutult koodibaasi kontrolli all.
3 Testige neid ja testige neid uuesti
Ja lõpuks, enne otsepäringute rakendamist, soovitan:
- SQL-i kasutajaliidese käivitamine ja päringute täitmine,
- Pange tähele kõiki vigu, mida need võivad põhjustada,
- Parandage need ja proovige uuesti.
Seejärel, kui teil on toimiv päringutest servajuhtumite jaoks, veendumaks, et midagi ei lähe rikutuks. See kehtib eriti siis, kui kavatsete oma päringutes kasutada LIKE-klausleid (mis on tõenäoliselt artikkel omaette).
Kas mul on API puudu?
WordPressi API suuruse tõttu on alati võimalus, et mul on midagi puudu, ma jätan midagi tähelepanuta või ei ole lihtsalt olemasolevate API-de osas tark.
Ja kui see nii on, siis parandan hea meelega ülaltoodud teavet (nii et ärge kartke kommentaari jätta).
Kui aga töötate vahepeal suhteliselt seatud andmetega, siis olete kindel, et veergudel on indeksid, teate, kuidas päringuid parameetristada, ja olete andmeid testinud, siis võib-olla teete seda otse andmebaasipäringud on õige tee.
Ja kui see nii on, on mõned viisid kodeerimisstandardite ignoreerimiseks, ilma et PHP CodeSniffer teie peale karjuks. 🙂
