✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Tyyppi tietokantakyselyjen kanssa työskentelemiseen WordPressissä

15

Niin paljon kuin olenkin tiettyjen WordPress-sovellusliittymien fani tietokannan kyselyihin, kuten:

Pidän myös siitä, että kyselyt tehdään tarvittaessa suoraan tietokannasta.

Kuten huomaat, minulla on johdonmukainen tapa tehdä tämä, ja koska olen joskus tehnyt tämän useammin, viime aikoina tässä on perusmuoto tietokantakyselyjen kanssa työskentelemiseen WordPressissä.

Jos kuitenkin teen tämän, muistan yleensä seuraavat asiat:

  1. varmista aina, että kysely on parametroitu (erityisesti käyttäjän syötteen tapauksessa),
  2. palauttaa tiedot assosiatiivisen taulukon muodossa.

Ensimmäinen tapaus on turvallisuus; toinen on enemmän tai vähemmän mukavuussyistä, jotta tietojen iterointi olisi yksinkertaisempaa PHP-taulukkofunktioiden avulla.

Tietokantakyselyt WordPressissä

Ensinnäkin on tärkeää ymmärtää kaksi käsitettä:

  1. parametrointi,
  2. array_column

Nämä ovat ydin siinä, miten kirjoitan kyselyitäni ja työskentelen niiden tulosten kanssa.

1 Parametrisointi

Voit lukea tästä lisää Codexista, mutta parametrointi on tapa, jolla voimme kirjoittaa kyselyitä, jotka estävät SQL-injektiota vastaan.

Codex-sivulta :

Kaikille SQL-kyselyjen tiedoille on lisättävä SQL-suojaus ennen SQL-kyselyn suorittamista SQL-injektiohyökkäysten estämiseksi. Menetelmä preparesuorittaa tämän toiminnon WordPressille, joka tukee sekä sprintf() -like että vsprintf() -tyyppistä syntaksia.

Tämä tarkoittaa, että menetelmä tukee tunnisteita, kuten %s, %d ja %f, kun tietoja välitetään kyselyyn. Näytän tästä esimerkin myöhemmin postauksessa.

2 Array-sarakkeiden käyttäminen

Tällaisten kyselyiden tulokset voidaan palauttaa useilla eri tavoilla. Nimittäin objektina, numeerisesti indeksoituna taulukkona tai assosiatiivisena taulukona. Useimmiten tykkään käyttää taulukoita (ja näytän kuinka tämä tehdään WordPressissä myöhemmin tässä viestissä).

Tyyppi tietokantakyselyjen kanssa työskentelemiseen WordPressissä

Syynä on kuitenkin se, että voin hyödyntää array_column -parametria. PHP manuaalista:

array_column() palauttaa arvot yhdestä syötteen sarakkeesta, joka tunnistetaan sarakkeen_avaimella. Valinnaisesti voidaan tarjota index_key indeksoimaan palautetun taulukon arvot syöttötaulukon index_key-sarakkeen arvoilla.

Tämä tarkoittaa, että jos sinulla on taulukko ja siinä on joukko tuloksia, joista jokaisella on sama sarake, voit helposti yksinkertaistaa tiedot välittämällä taulukon menetelmään ja välittämällä sitten sarakkeen nimen menetelmään.

Lopputulos? Numeerisesti indeksoitu arvojen joukko. Tämä tekee tietojen iteroinnista paljon helpompaa array_map :n, foreachin tai foreach :n avulla .

Tyyppi tietokannan kyselyyn

Kun tämä perustelu on paikallaan, tässä on tynkä, jota käytän yleensä aina, kun työskentelen suoraan tietokantakyselyjen kanssa:

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        ",
        $userId
    ),
    ARRAY_A
);

if (empty($results)) {
  return;
}
$results = array_map($results, 'column_name');

Ja tässä on esimerkki, jossa on pari erilaista tietoa, jotta näet, miten se toimii :

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT
            user_id,
            meta_value
        FROM $wpdb->usermeta
        WHERE meta_key LIKE %s
        AND user_id = %d
        ",
        '%wc_authorize_net_cim_customer_profile_id%',
        wp_get_current_user()->ID;
    ),
    ARRAY_A
);

if (empty($results)) {
    return [];
}
$results = array_map($results, 'meta_value');

Kyselyn tekeminen wp_user_meta- taulukkoa vastaan ​​saattaa tuntua typerältä, koska get_user_meta on kelvollinen API-toiminto, mutta ajattelin, että se olisi helppo ymmärtää, koska yritän selittää, mitä yritän selittää.

Joka tapauksessa en voi toimittaa kyselyä enkä käsitellä tapausta, jossa tulokset saattavat tulla takaisin useilla sarakkeilla (tässä tapauksessa sinun on käytettävä jotain muuta kuin array_map, mutta sen pitäisi olla tarpeeksi helppoa, eikö? )

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja