Suorat tietokantakyselyt WordPressissä
Jos olet palannut läpi jonkin kirjoittamistani viesteistä esimerkiksi kahden viime vuoden aikana, tulet todennäköisesti huomaamaan, että käytän saatavilla olevia API:ita hakemistotietokantakyselyiden kautta lähes joka ikinen kerta.
Ja totuus on, että kallistun edelleen siihen suuntaan. Eli jos on olemassa abstraktio tai API, joka on käytettävissä jonkin tietyn tekemiseen, yritän käyttää sitä.
Mutta parissa viimeaikaisessa projektissa olen työskennellyt joidenkin suhteellisen suurten tietojoukkojen kanssa (suuret verrattuna ei-yritystason tietojoukkoon). Ja näin tehdessäni olen yrittänyt varmistaa, että tietojen päivitykset tapahtuvat mahdollisimman nopeasti.
Tällaisissa tilanteissa, vaikka WordPress -koodausstandardit eivät pidä siitä, suorat tietokantakyselyt ovat joskus paras vaihtoehto tietyissä olosuhteissa.
Suorat tietokantakyselyt
Suorat tietokantakyselyt ovat yksi niistä asioista, joilla on hieman ristiriitainen maine WordPress-kehittäjien keskuudessa:
- he ovat masentuneita koodausstandardeissa,
- WordPress tarjoaa pääsyn suoraan tietokantaan $wpdb:n kautta,
- tietokantakyselyissä on vivahteita, jotka on ymmärrettävä.
Joten kun näet jotain tällaista :
<?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
}
Mistä tietää, onko se hyvä liike vai ei? Ja mikä vielä parempaa, mistä tiedät, pitäisikö sinun käyttää hakemistotietokantakyselyitä omassa koodissasi?
Esitän muutamia kysymyksiä, joita esitän itselleni käsitellessään niitä, kaikki alla.
1 Onko sarakkeissa indeksejä?
Ennen kuin käytät suoria tietokantakyselyitä WordPressissä, on tarkistettava, onko kyseleilläni sarakkeilla indeksejä kyseisissä sarakkeissa.
Ja syy on tämä :
Indeksejä käytetään tietojen nopeaan paikantamiseen ilman, että tietokantataulukon jokaiselta riviltä on haettava joka kerta, kun tietokantataulukkoa käytetään.
Tärkeintä on, että sarakkeiden kyselyjen ja päivitysten nopeus on nopeampi, jos sarakkeissa on indeksejä.
Suorat tietokantakyselyt riippuvat tietokannan rakenteesta.
Tätä varten meidän ei pitäisi tehdä tätä jatkuvasti. Mutta joskus se on sopivaa (kuten kun päivität meta-arvoja) ja silloin, kun se ei ole.
2 Parametrioi kyselysi
Suoria tietokantakyselyjä käytettäessä on erittäin tärkeää parametroida kyselyt turvallisuuden vuoksi. Voit lukea kaiken tästä Codexista, eikä tätä kannata ohittaa.
Suoraan dokumentaatiosta :
Täydellisen yleiskatsauksen SQL:n poistumisesta WordPressissä on kohdassa Tietokannan tietojen validointi. Se on pakollinen luku kaikille WordPress-koodin tekijöille ja laajennusten tekijöille.
Eli jos käytät käyttäjän syötteitä, sinun on varmistettava, että se on desinfioitu, puhdas ja valmis lisättäväksi tietokantaan. Mutta mitä se kannattaa, en melkein koskaan anna käyttäjän syötteen vaikuttaa suoriin tietokantakyselyihin.
Sen sijaan ne perustuvat yleensä tietoihin, jotka minulla on koodissa ja haluan päivittää tai muokata, kun ne ovat turvallisesti koodikannan hallinnassa.
3 Testaa ne ja testaa ne uudelleen
Ja lopuksi, ennen suorien kyselyjen toteuttamista, suosittelen:
- SQL-käyttöliittymän käynnistäminen ja kyselyjen suorittaminen,
- Huomaa mahdolliset virheet, joita ne voivat aiheuttaa,
- Korjaa ne ja yritä uudelleen.
Sitten kun olet suorittanut toimivan kyselytestin reunatapauksille varmistaaksesi, että jokin ei mene rikki. Tämä on erityisen totta, jos aiot käyttää LIKE-lauseita kyselyissäsi (joka on luultavasti artikkeli itsessään).
Puuttuuko minulta API?
WordPressin API:n koon ansiosta on aina mahdollisuus, että minulta puuttuu jotain, laiminlyön jotain tai en yksinkertaisesti ole älykäs olemassa olevien API:iden suhteen.
Ja jos näin on, korjaan mielelläni yllä olevat tiedot (joten älä epäröi jättää kommenttia).
Mutta sillä välin, jos työskentelet suhteellisen määrätyn datan kanssa, olet varma, että sarakkeissa on indeksejä, osaat parametroida kyselyt ja olet testannut tiedot, niin ehkä suoritat tietokantakyselyt ovat oikea tapa edetä.
Ja jos näin on, on olemassa muutamia tapoja sivuuttaa koodausstandardit ilman, että PHP CodeSniffer huutaa sinulle. 🙂
