✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Uno stub per lavorare con le query di database in WordPress

24

Per quanto io sia un fan di alcune API di WordPress per interrogare il database come:

Sono anche un fan delle query direttamente sul database quando necessario.

Come noterai, c’è un modo coerente in cui lo faccio e poiché ci sono volte in cui lo faccio più frequentemente, negli ultimi tempi, ecco un formato di base per lavorare con le query di database in WordPress.

Se lo faccio, però, generalmente ci sono cose che tengo a mente:

  1. assicurati sempre che la query sia parametrizzata (soprattutto nel caso di input dell’utente),
  2. restituire le informazioni sotto forma di un array associativo.

Il primo caso riguarda la sicurezza; il secondo è più o meno per comodità di semplificare l’iterazione dei dati tramite le funzioni di array PHP.

Query al database in WordPress

Innanzitutto, è importante comprendere due concetti:

  1. parametrizzazione,
  2. colonna_array

Questi sono il fulcro di come scrivo le mie domande e lavoro con i risultati di esse.

1 Parametrizzazione

Puoi leggere di più su questo nel Codex, ma la parametrizzazione è un modo in cui siamo in grado di scrivere query che funzionano per prevenire l’iniezione di SQL.

Dalla pagina del Codice :

Tutti i dati nelle query SQL devono essere sottoposti a escape SQL prima che la query SQL venga eseguita per prevenire attacchi di SQL injection. Il preparemetodo esegue questa funzionalità per WordPress, che supporta sia una sintassi sprintf() -like che vsprintf() -like.

Vale a dire che il metodo supporta token come %s, %d e %f quando si passano informazioni nella query. Mostrerò un esempio di questo più avanti nel post.

2 Lavorare con le colonne della matrice

I risultati di tali query possono essere restituiti in una varietà di modi diversi. Vale a dire, come un oggetto, un array indicizzato numericamente o un array associativo. Il più delle volte, mi piace usare gli array (e mostrerò come farlo in WordPress più avanti in questo post).

Uno stub per lavorare con le query di database in WordPress

Il motivo, tuttavia, è che posso sfruttare array_column. Dal manuale PHP:

array_column() restituisce i valori da una singola colonna dell’input, identificata da column_key. Facoltativamente, è possibile fornire una chiave_indice per indicizzare i valori nella matrice restituita in base ai valori della colonna chiave_indice della matrice di input.

Ciò significa che se hai un array e ha un gruppo di risultati ognuno dei quali ha la stessa colonna, puoi facilmente semplicemente le informazioni passando l’array in un metodo e quindi passando il nome della colonna in un metodo.

Il risultato? Una matrice numericamente indicizzata dei valori. Ciò rende molto più semplice scorrere i dati tramite array_map, using for o using foreach.

Uno stub per interrogare il database

Con questa logica in atto, ecco lo stub che normalmente utilizzo ogni volta che lavoro direttamente con le query del database:

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

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

Ed ecco un esempio con un paio di informazioni diverse in modo da poter vedere come funziona :

<?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');

Fare query sulla tabella wp_user_meta potrebbe sembrare sciocco poiché get_user_meta è una funzione API valida, ma ho pensato che sarebbe stata una query facile da capire dato quello che sto cercando di spiegare in questo passato.

Ad ogni modo, non posso fornire la query né posso gestire il caso in cui i risultati potrebbero tornare con più colonne (in tal caso, dovrai lavorare con qualcosa di diverso da array_map, ma dovrebbe essere abbastanza facile, giusto? )

Fonte di registrazione: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More