• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Database in PHP: Introduzione a PDO

Z

Zanzo

Guest
Autore del topic
Premessa: Essendo un'introduzione, non mi soffermerò particolarmente sulle funzionalità, ma fornirò una panoramica dei principali metodi.

Molti di voi saranno a conoscenza del fatto che, nella versione 5.5.0 di PHP, le funzioni MySQL verranno deprecate. Ciò è stato deciso per orientare gli sviluppatori all'utilizzo di MySQLi ma soprattutto PDO.
PDO (PHP Data Object) non è altro che una classe contenente svariati metodi e proprietà in grado di garantire un accesso sicuro ad un database. Uno dei suoi punti forti è la portabilità, infatti se decidessimo di cambiare tipologia di database (per esempio da MySQL a PostgreSQL) basterebbe semplicemente cambiare qualche keyword, senza riscrivere completamente lo script.
Diversamente dalle funzioni MySQL, in PDO il login e la connessione al database avvengono contemporaneamente, mediante l'istruzione:

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


Come vedete, l'instanziamento è identico a quello di ogni altra classe. La prima stringa deve contenere il tipo di RDBMS (in questo caso"mysql"), seguito da ":", il nome dell'host su cui si trova il server e il nome del database a cui vogliamo connetterci. La seconda stringa deve contenere lo username per accedere al database (solitamente "root"), mentre l'ultima stringa deve contenere la relativa password.
Per coloro che sono abituati ad utilizzare i blocchi try..catch è consigliabile utilizzare questo metodo dopo ogni connessione, in modo da attivare la gestione delle eccezzioni:

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


Fatto ciò, abbiamo configurato correttamente il nostro database! Ora non ci resta che utilizzarlo, e qui ci viene in aiuto il metodo exec():

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


In questo modo abbiamo eseguito una semplice SELECT sul nostro database. Avremmo potuto utilizzare un'altra funzione simile, cioè query():

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


I due metodi sono equivalenti, l'unica differenza è che exec() restituisce come valore il numero dei risultati (affected rows, come vengono chiamati) mentre query() restituisce un PDOStatement. Gli statement sono un'altro punto forte che contraddistingue PDO dalle normali funzioni di connessione al database. Immaginate il vostro script che esegue una query. Dovete necessariamente inserire delle precauzioni per evitare, per esempio, SQL Injection. Utilizzando gli statement, invece, potete semplicemente eseguire una query sprovvista di parametri, e quindi senza pericoli. A questo punto PDO aspetterà i parametri richiesti, che poi verranno inseriti negli appositi campi. Il tutto si svolge con 3 metodi:

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


Il primo metodo, prepare() esegue la query e la mantiene in memoria. Come vedete, al posto dei valori sono stati inseriti dei "segnaposto". Questi segnaposto permettono che la query venga eseguita senza complicazioni, ma dovranno poi essere rimpiazzati con il valore corrispondente, mediante il metodo bindValue(). Quest'ultimo accetta 4 parametri (anche se io ne ho utilizzati solo 3), cioè il nome del segnaposto (in questo caso ":id" e ":username"), il valore (simboleggiato dalle variabili $id e $username, la tipologia di dato ([noparse]PDO::PARAM_INT[/noparse] per un numero intero, [noparse]PDO::PARAM_STR[/noparse] per una stringa) e infine la lunghezza in caratteri del valore. Gli ultimi due parametri sono opzionali, ma è buona abitudine utilizzarli per limitare gli errori. In conclusione, il metodo execute() avvia il processo di inserimento dei dati.
L'ultimo metodo di cui voglio parlarvi è fetchAll(). A molti sarà venuto in mente mysql_fetch_array(), data l'assonanza. Il funzionamente è simile, ma molto più vantaggioso. Per illustrarvelo, utilizzerò il codice precedente:

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!


Come avrete capito, fetchAll() crea un array multidimensionale contenente tutti i risultati e quindi estraibili in un solo foreach, a differenza delle funzioni MySQL che necessitavano di 2 o più cicli. In sostanza, in questo modo avrete a disposizione tutti i risultati in un'unica variabile, alleggerendo notevolmente il codice.


Il tutorial è finito. Il motivo per cui l'ho scritto è far avvicinari i giovani programmatori PHP a questo straordinario strumento che è PDO. Ciò è rivolto soprattutto agli sviluppatori di CMS et similia, in modo da renderli compatibili con qualunque database voglia utilizzare l'utente, mantenendo lo stesso livello di sicurezza ed affidabilità. Ci saranno alcuni piccoli errori qua e là, perciò chiedo a chiunque di segnalarmeli :emoji_slight_smile:
 
Riferimento: Database in PHP: Introduzione a PDO

Bella guida, grazie mille per l'impegno :emoji_slight_smile:
 
Riferimento: Database in PHP: Introduzione a PDO


Ottima guida. Utile davvero! (anche se è una introduzione già promette bene) @Zanzo Una domanda: Quanto tempo ci hai messo per farla? ^^
@Kaito ci sa' fare
:sospiro:
 
Riferimento: Database in PHP: Introduzione a PDO


Ottima guida. Utile davvero! (anche se è una introduzione già promette bene) @Zanzo Una domanda: Quanto tempo ci hai messo per farla? ^^
@Kaito ci sa' fare
:sospiro:

Ti ringrazio. Comunque, ho iniziato a scrivere alle 15. E' una cosa basilare, non richiedere poi tanto impegno.
 
Riferimento: Database in PHP: Introduzione a PDO

Maledetta classe PDO :emoji_relieved: Comunque good job