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.