In WordPress, il database viene gestito principalmente tramite la classe $wpdb, che è un’istanza predefinita della classe wpdb. Questa classe permette di eseguire query SQL in modo sicuro e diretto, fornendo un’astrazione utile per accedere al database del sito.
Come utilizzare $wpdb
Per accedere al database, è necessario utilizzare la variabile globale $wpdb. La sintassi generale è:
global $wpdb;
Funzioni principali di $wpdb
Ecco i metodi principali che puoi usare per eseguire query:
1. Esecuzione di query generiche: $wpdb->query()
Questo metodo è utilizzato per eseguire query SQL che non restituiscono risultati (ad esempio, INSERT, UPDATE, DELETE, ecc.).
Sintassi:
global $wpdb; $result = $wpdb->query( "SQL_QUERY" );
Esempio:
global $wpdb;
$wpdb->query( "DELETE FROM {$wpdb->prefix}posts WHERE ID = 10" );
2. Recuperare un singolo valore: $wpdb->get_var()
Questo metodo recupera un singolo valore da una query.
Sintassi:
global $wpdb; $value = $wpdb->get_var( "SQL_QUERY" );
Esempio:
global $wpdb;
$post_count = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}posts WHERE post_status = 'publish'" );
echo "Numero di post pubblicati: $post_count";
3. Recuperare una riga: $wpdb->get_row()
Recupera una singola riga da una query come un oggetto (o come array, se specificato).
Sintassi:
global $wpdb;
$row = $wpdb->get_row( "SQL_QUERY", OUTPUT_TYPE );
OUTPUT_TYPE: Specifica il formato del risultato. Può essere:
OBJECT (default): Restituisce un oggetto.
ARRAY_A: Restituisce un array associativo.
ARRAY_N: Restituisce un array numerico.
Esempio:
global $wpdb;
$row = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}posts WHERE ID = 1", OBJECT );
echo "Titolo del post: " . $row->post_title;
4. Recuperare più righe: $wpdb->get_results()
Recupera più righe da una query come array di oggetti (o array, se specificato).
Sintassi:
global $wpdb; $results = $wpdb->get_results( "SQL_QUERY", OUTPUT_TYPE );
Esempio:
global $wpdb;
$results = $wpdb->get_results( "SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_status = 'publish'", OBJECT );
foreach ( $results as $post ) {
echo "Post ID: {$post->ID}, Titolo: {$post->post_title}<br>";
}
5. Recuperare un array associativo: $wpdb->get_col()
Recupera una colonna specifica da una query.
Sintassi:
global $wpdb; $column = $wpdb->get_col( "SQL_QUERY" );
Esempio:
global $wpdb;
$titles = $wpdb->get_col( "SELECT post_title FROM {$wpdb->prefix}posts WHERE post_status = 'publish'" );
foreach ( $titles as $title ) {
echo "Titolo: $title<br>";
}
Inserire, Aggiornare e Eliminare dati
1. Inserire dati: $wpdb->insert()
Utilizza questo metodo per inserire dati in modo sicuro.
Sintassi:
$wpdb->insert( TABLE_NAME, DATA_ARRAY, FORMAT_ARRAY );
TABLE_NAME: Nome della tabella.
DATA_ARRAY: Array associativo con i dati da inserire (colonna => valore).
FORMAT_ARRAY: Specifica il tipo dei valori (%s per stringa, %d per interi, %f per decimali).
Esempio:
global $wpdb;
$wpdb->insert(
"{$wpdb->prefix}posts",
array(
'post_title' => 'Nuovo Post',
'post_content' => 'Contenuto del post',
'post_status' => 'draft',
'post_type' => 'post'
),
array(
'%s', // Stringa
'%s', // Stringa
'%s', // Stringa
'%s' // Stringa
)
);
2. Aggiornare dati: $wpdb->update()
Aggiorna i dati in una tabella.
Sintassi:
$wpdb->update( TABLE_NAME, DATA_ARRAY, WHERE_ARRAY, FORMAT_ARRAY, WHERE_FORMAT_ARRAY );
<h3>Esempio:</h3>
[php]
global $wpdb;
$wpdb->update(
"{$wpdb->prefix}posts",
array( 'post_status' => 'publish' ), // Nuovi valori
array( 'ID' => 1 ), // Condizione
array( '%s' ), // Formato nuovi valori
array( '%d' ) // Formato condizione
);
3. Eliminare dati: $wpdb->delete()
Elimina righe da una tabella.
Sintassi:
$wpdb->delete( TABLE_NAME, WHERE_ARRAY, WHERE_FORMAT_ARRAY );
Esempio:
global $wpdb;
$wpdb->delete(
"{$wpdb->prefix}posts",
array( 'ID' => 10 ), // Condizione
array( '%d' ) // Formato condizione
);
Sicurezza e Placeholders
Mai inserire dati direttamente nelle query senza sanitizzazione! Usa i placeholder per prevenire attacchi SQL injection:
%s per stringhe.
%d per numeri interi.
%f per numeri decimali.
Esempio con placeholder:
global $wpdb;
$title = 'Titolo sicuro';
$post = $wpdb->get_row( $wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}posts WHERE post_title = %s",
$title
) );
Conclusione
La classe $wpdb fornisce un’interfaccia potente e sicura per interagire con il database WordPress. Usando i suoi metodi predefiniti e i placeholder per la sanitizzazione, puoi costruire applicazioni scalabili e sicure.
