La Classe wpdb

1.  Interfacciarsi al Database

Per interfacciarsi al database ed effettuare tutte le operazioni necessarie, WordPress usa una classe specifica, chiamata wpdb e che si basa sulla classe ezSQL implementata da Justin Vincent. Sebbene la classe usata da WordPress sia leggermente differente da ezSQL, il loro utilizzo è essenzialmente lo stesso. Per maggiori informazioni, si veda la documentazione di ezSQL.

2.  Le Query - Effettuare ogni tipo di richiesta al Database

La funzione query permette di eseguire ogni tipo di richiesta al database di WordPress.

 <?php $wpdb->query('query'); ?>
query
(stringa) La richiesta che si vuole eseguire.

Se la richiesta ottiene dei risultati, la funzione restituisce un numero intero corrispondente al numero delle righe interessate dalla richiesta e tali risultati vengono memorizzati in una sorta di cache per essere usati dalle altre funzioni della classe wpdb. Se invece non ci sono risultati, la funzione restituisce zero (0). Se ancora, c'è un errore mySQL, la funzione restituisce come valore FALSE. (Attenzione: poiché possono essere restituiti sia 0 che FALSE, è bene essere sicuiri di aver usato gli operatori di comparazione giusti: uguaglianza == contro identità ===).

2.1  Esempi

Aggiungere l'Articolo 13 alla Categoria 2: (i numeri ovviamente rappresentano gli ID)

 $wpdb->query("
 	INSERT INTO $wpdb->post2cat (post_id, category_id)
 	VALUES (13, 2)");

Elimina il campo personalizzato 'gargle' (e relativo valore) dall'Articolo 13.

 $wpdb->query("
 	DELETE FROM $wpdb->postmeta WHERE post_id = '13'
 	AND meta_key = 'gargle'");

Eseguita in WordPress dalla funzione delete_post_meta().

Imposta la Pagina 7 come pagina Madre della Pagina 17.

 $wpdb->query("
 	UPDATE $wpdb->posts SET post_parent = 7
 	WHERE post_ID = 15 AND post_status = 'static'");

3.  Selezionare una variabile - get_var

La funzione get_var restituisce una variabile singola dal database. Poiché viene restituita una sola variabile, l'intero risultato della query viene memorizzato per essere eventualmente utilizzato successivamente. Restituisce NULL se non ci sono risultati.

 <?php $wpdb->get_var('query',column_offset,row_offset); ?>
query
(stringa) La richiesta che si vuole eseguire. Se si imposta questo parametro a null, la variabile specificata viene restituita dai risultati memorizzati della query precedente.
column_offset
(intero) La colonna di tabella desiderata (0 è la prima). Il valore predefinito è 0.
row_offset
(intero) La riga di tabella desiderata (0 è la prima). Il valore predefinito è 0.

3.1  Esempi

Ottenere il nome della Categoria dei Link che ha ID 4.

 $name = $wpdb->get_var("SELECT cat_name FROM $wpdb->linkcategories WHERE cat_id=4");
echo $name;

Eseguita in WordPress dalla funzione get_linkcatname().

4.  Selezionare una Riga - get_row

Per ottenere un'intera riga dalla query, si usa get_row. Questa funzione restituisce la riga in diversi modi: come oggetto, array associativo o array numerico. Se i risultati contengono più di una riga, viene restituita solo la riga specificata, mentre le altre vengono memorizzate per essere utilizzate successivamente.

 <?php $wpdb->get_row('query', output_type, row_offset); ?>
query
(stringa) La richiesta che si vuole eseguire. Se si imposta questo parametro a null, la riga specificata viene restituita dai risultati memorizzati della query precedente.
output_type
Una delle tre costanti predefinite. Il valore predefinito è OBJECT.
OBJECT
il risultato viene restituito in forma di oggetto.
ARRAY_A
il risultato viene restituito in forma di array associativo.
ARRAY_N
il risultato viene restituito in forma di array numerico.
row_offset
(intero) La riga di tabella desiderata (0 è la prima). Il valore predefinito è 0.

4.1  Esempi

Ottenere tutte le informazioni relative al Link 10.

 $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10");

Le proprietà dell'oggetto $mylink sono rappresentate dai nomi di colonna del risultato prodotto dalla query, vale a dire tutte le colonne della tabella $wpdb->links.

 echo $mylink->link_id; // stampa "10"

Se invece si usa

 $mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A);

si ottiene un array associativo:

 echo $mylink['link_id']; // stampa "10"

Analogamente

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N);

produce un array numerico:

 echo $mylink[1]; // stampa "10"

5.  Selezionare una Colonna - get_col

Per selezionare una colonna, si usa la funzione get_col che produce un array dimensionale. Se i risultati contengono più di una colonna, viene restituita solo la colonna specificata, mentre le altre vengono memorizzate per essere utilizzate successivamente.

 <?php $wpdb->get_col('query',column_offset); ?>
query
(stringa) La richiesta che si vuole eseguire. Se si imposta questo parametro a null, la colonna specificata viene restituita dai risultati memorizzati della query precedente.
column_offset
(intero) La colonna di tabella desiderata (0 è la prima). Il valore predefinito è 0.

5.1  Esempi

Ottere tutte le Categorie alle quali appartiene l'Articolo 103.

 $postcats = $wpdb->get_col("SELECT category_id
 	FROM $wpdb->post2cat
 	WHERE post_id = 103
 	ORDER BY category_id");

Eseguita in WordPress dalla funzione wp_get_post_cats().

6.  Selezionare risultati generici - get_results

Di solito, i risultati che comprendono più righe possono essere estratti dal database tramite la funzione get_results che restituisce l'intero risultato della richiesta in forma di array dimensionale. Ciascun elemento dell'array corrisponde ad una riga del risultato e in maniera simile a get_row, può essere un oggetto, un array associativo, o un array numerico.

 <?php $wpdb->get_results('query', output_type); ?>
query
(stringa) La richiesta che si vuole eseguire. Se si imposta questo parametro a null i dati vengono restituiti da quelli memorizzati dalla query precedente.
output_type
Una delle tre costanti predefinite. Il valore predefinito è OBJECT.
OBJECT
il risultato viene restituito in forma di oggetto.
ARRAY_A
il risultato viene restituito in forma di array associativo.
ARRAY_N
il risultato viene restituito in forma di array numerico.
row_offset
(intero) La riga di tabella desiderata (0 è la prima). Il valore predefinito è 0.

6.1  Esempi

Ottenere gli ID e i Titoli di tutte le Bozze dell'Utente 5 e stampare i Titoli.

 $fivesdrafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts
 	WHERE post_status = 'draft' AND post_author = 5");

 foreach ($fivesdrafts as $fivesdraft) {
 	echo $fivesdraft->post_title;
}

7.  Ottimizzare i dati per l'Inserimento - escape

Prima di inserire dei dati nel database, bisogna assicurarsi che siano ottimizzati in modo da non avere errori. Spesso questi errori capitano se nel testo sono presenti le virgolette (") o gli apici ('), che causano una rappresentazione errata della query. Per evitare questo tipo di errori è sufficiente usare la funzione escape.

 <?php $wpdb->escape('stringa'); ?>
stringa
(stringa) La stringa di testo che si vuole ottimizzare.

7.1  Esempi

Aggiungere all'Articolo 10 un Campo Personalizzato avente come chiave "L'Agenda di Oggi" e come valore "Chiamare l'idraulico.". In questo caso i due apostrofi presenti nei campi personalizzati, potrebbero causare un errore nella query di inserimento, ragion per cui si può ottimizzare il tutto con

 $metakey = $wpdb->escape("L'Agenda di Oggi");
$metavalue = $wpdb->escape("Chiamare l'idraulico.");

 $wpdb->query("
 	INSERT INTO $wpdb->postmeta
 	(post_id,meta_key,meta_value)
 	VALUES ('10','$metakey','$metavalue')");

Eseguita in WordPress dalla funzione add_meta().

8.  Mostrare o nascondere gli errori SQL - show/hide_errors

E' possibile attivare o disattivare la visualizzazione degli errori SQL tramite le funzioni show_errors e hide_errors.

 <?php $wpdb->show_errors(); ?>
 <?php $wpdb->hide_errors(); ?>

E' anche possibile visualizzare gli eventuali errori generati dall'ultima query eseguita, tramite print_error.

 <?php $wpdb->print_error(); ?>

9.  Ottenere informazioni sulle Colonne - get_col_info

E' possibile ottenere informazioni circa le colonne interessate dall'ultima query eseguita, tramite get_col_info. Questa funzione può rivelarsi utile quando una precedente funzione ha restituito un OBJECT di cui non si conoscono le proprietà. Questa restituisce le informazioni relative alla colonna specificata, oppure un array contenente le informazioni relative a tutte le colonne, nel caso non sia stata indicata nessuna colonna.

 <?php $wpdb->get_col_info('type', offset); ?>
type
(stringa) Le informazioni che si desiderano ottenere. Può avere come parametro uno dei seguenti valori (la lista è presa dalla documentazione di ezSQL). Il valore predefinito è name.
name
nome della colonna. Predefinito.
table
nome della tabella a cui appartiene la colonna
max_length
lunghezza massima della colonna
not_null
1 se la colonna non permette valori di tipo NULL
primary_key
1 se la colonna è una chiave primaria
unique_key
1 se la colonna è una chiave unica
multiple_key
1 se la colonna non è una chiave unica
numeric
1 se la colonna è di tipo numerico
blob
1 se la colonna è di tipo BLOB
type
il tipo di colonna
unsigned
1 se la colonna è unsigned
zerofill
1 se la colonna è zero-filled
offset
(intero) Specifica la colonna di cui si vogliono avere le informazioni (0 è la prima). Il valore predefinito è -1.
-1
Ottiene le informazioni relative a tutte le colonne. Restituisce un array. Predefinito.
Non-negative
(intero) - Ottiene le informazioni da una colonna specifica (0 è la prima).

10.  Svuotare la Cache dei Risultati - flush

E' possibile eliminare i risultati SQL memorizzati tramite flush.

 <?php $wpdb->flush(); ?>

La funzione elimina anche i valori di $wpdb->last_result, $wpdb->last_query, e $wpdb->col_info.

11.  Variabili relative alla Classe

$show_errors
Mostra o meno la visualizzazione degli errori SQL. Il valore predefinito è TRUE.
$num_queries
Il numero delle query eseguite.
$last_query
L'ultima query eseguita.
$queries
Se si vogliono memorizzare tutte le query eseguite (e i rispettivi tempi di esecuzione) settare la costante SAVEQUERIES a TRUE (il valore predefinito di tale costante è FALSE). Se SAVEQUERIES è settata a TRUE, le query vengono memorizzate in questa variabile in forma di array.
$last_results
I risultati ottenuti dall'ultima query eseguita.
$col_info
Le informazioni della colonna interessata dall'ultima query eseguita.

12.  Tabelle

Le tabelle del database di WordPress interessate dalla classe wpdb.

$posts
La tabella degli Articoli.
$users
La tabella degli Utenti.
$categories
La tabella delle Categorie.
$post2cat
La tabella che definisce l'appartenenza degli Articoli alle Categorie.
$comments
La tabella dei Commenti.
$links
La tabella dei Links.
$linkcategories
La tabella delle Categorie dei Link.
$options
La tabella delle Opzioni.
$postmeta
La tabella contenente il contenuto Meta (cioè i Campi Personalizzati).
Ultima modifica il 19/01/2006 ore 09:48