Drupal 7 – Lavorare con il database tramite PHP PDO
Con il passaggio a Drupal 7 utilizziamo il nuovo livello di astrazione del database, il Drupal DB Abstraction Layer API, basato su PDO. PDO è già da tempo impiegato nel framework Zend e in molti altri framework PHP. Tutto funzionava bene in Drupal 6 con le query SQL scritte manualmente, quindi perché introdurre qualcosa di nuovo?
Cominciamo col capire cosa sia esattamente PDO.
Lavorare con il database in Drupal 7 – Lezione 1 – Drupal Database API
Se hai già sviluppato moduli per la versione 6 di Drupal, non ti sarà difficile passare al nuovo Database API di Drupal 7. Il nuovo DB API si basa sull’estensione PHP PDO, il che gli consente di funzionare con diversi tipi di database come MySQL, PostgreSQL, MSSQL e persino Oracle. In termini di semplicità, serve un po’ di pratica per abituarsi alla nuova sintassi, poiché scrivere query SQL tradizionali può sembrare più familiare.
Ecco un estratto da quanto riportato nella documentazione ufficiale:
Lavorare con il database in Drupal 7 – Lezione 2 – Configurazione del database
Il principale strumento per definire la connessione al database in Drupal è l’array $databases nel file settings.php. Come suggerisce il nome stesso, $databases consente di definire più connessioni al database e supporta anche la definizione di più target (obiettivi). La connessione non viene aperta (cioè l’oggetto di connessione non viene creato) finché una parte del codice non esegue effettivamente una query sul database.
Lavorare con il database in Drupal 7 – Lezione 3 – Query statiche (SELECT)
La forma più comune di query in Drupal è la query statica. Una query statica viene passata al database così com’è, senza modifiche da parte di Drupal. Solo le query di selezione (SELECT) possono essere statiche.
Le query statiche dovrebbero essere usate solo per operazioni molto semplici. Per query più complesse, dinamiche o modificabili a runtime, è preferibile usare le query dinamiche.
Un modo semplice per eseguire una query statica è il seguente:
Lavorare con il database in Drupal 7 – Lezione 4 – Query dinamiche (SELECT)
Probabilmente siamo arrivati alla parte più interessante del Database API di Drupal: le query dinamiche. Si chiamano così perché Drupal costruisce dinamicamente la stringa della query. Tutte le query di inserimento, aggiornamento, eliminazione o unione possono essere dinamiche. Le query di selezione possono essere sia dinamiche che statiche, ma è consigliato usare sempre le query dinamiche anche per le SELECT.
Lavorare con il database in Drupal 7 – Lezione 5 – Extenders (Estensioni)
Le query di selezione in Drupal supportano gli extenders (estensioni). Un extender consente di aggiungere funzionalità extra a una query di selezione durante l’esecuzione. Questa funzionalità può essere un nuovo metodo o una modifica del comportamento di un metodo esistente.
Lavorare con il database in Drupal 7 – Lezione 6 – Modifica dinamica delle query (hook_query_alter)
Una caratteristica importante delle query dinamiche di selezione in Drupal è la possibilità per altri moduli di modificare una query “al volo”. Ciò consente ad altri moduli di aggiungere istruzioni personalizzate alla query, influenzando così il suo comportamento o applicando modifiche durante l’esecuzione, ad esempio per definire restrizioni di accesso ai nodi. Esistono tre componenti principali per la modifica dinamica delle query: tagging, meta data e hook_query_alter().
Lavorare con il database in Drupal 7 – Lezione 7 – Elaborazione dei risultati di una query (fetch)
Una query di selezione restituirà sempre un risultato che può contenere da 0 a più record. Esistono diversi modi per elaborare i dati restituiti, e puoi scegliere quello più adatto alle tue esigenze.
Il metodo più comune per elaborare i risultati è utilizzare un ciclo foreach():
Lavorare con il database in Drupal 7 – Lezione 8 – Query di inserimento (INSERT INTO)
Le query di inserimento devono sempre essere costruite utilizzando il costruttore di query. Alcuni database richiedono gestori speciali per i campi LOB (Large Object, come TEXT in MySQL) e BLOB (Binary Large Object), quindi è necessario un livello di astrazione per consentire ai driver di database di implementare tali gestori specifici.
Le query di inserimento iniziano con la funzione db_insert():
Lavorare con il database in Drupal 7 – Lezione 9 – Query di aggiornamento (UPDATE)
Le query di aggiornamento devono sempre essere create utilizzando il costruttore di query. I diversi database hanno gestori specifici per i tipi di dati LOB (Large Object, come TEXT in MySQL) e BLOB (Binary Large Object), quindi è necessario un livello di astrazione per consentire ai driver di implementare i propri gestori specifici.
Le query di aggiornamento devono iniziare con la funzione db_update():