Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Cms / framework : Query sicure in Wordpress

L'oggetto $wpdb consente di gestire in maniera semplice le varie query delle nostre applicazioni. Tuttavia il supporto alla protezione delle SQL INJECTION non è automatico, occorre utilizzare le apposite funzioni esc_sql() o prepare().

Cms / framework

Grazie all'oggetto $wpdb Wordpress consente di gestire agevolmente l'esecuzione delle query e la relativa risposta  del database. Tuttavia questa classe non richiama automaticamente funzioni di protezione dalle Sql Injection e da caratteri pericolosi. Per far questo è necessario utilizzare la funzione esc_sql oppure prepare().

La funzione esc_sql() è stata introdotta da Wordpress 2.8.0 e riceve come parametro una stringa. Si tratta di una funzione da usare a sè:

$stringa =  "ciao 'test'";
echo esc_sql($stringa);

Tuttavia è preferibile gestire tutte le query con l'oggetto $wpdb, che offre già un proprio metodo di pulizia delle query: prepare().
Prepare() si comporta come una classica printf, ricevendo come parametro una stringa con caratteri jolly e a seguire i relativi valori. Ecco un esempio pratico:

$sql = 'select * from '.$wpdb->posts.' where post_status="publish" and post_type="%s"';
$variabile_dati = 'post';
$elenco = $wpdb->prepare($sql,$variabile_dati);

Come in una printf(), il numero di parametri cambia a seconda delle stringhe da utilizzare. L'importante è rispettare il corretto ordine: il primo parametro è la stringa sql, tutti gli altri sono le variabili che nella stringa sono stati temporaneamente sostituiti dal "segnaposto" %s.

Se abbiamo bisogno di conoscere le variabili realmente passata al database dopo la funzione di ripulitura di prepare(), è sufficiente un var_dump:

var_dump($elenco);

In caso di errore torna sempre utile l'apposita funzione di debug:

$wpdb->show_errors();