Nelle guide precedenti abbiamo visto come memorizzare in maniera permanente informazioni tramite i file e le funzioni che PHP mette a disposizione per leggere e scrivere dati su diversi formati di file.
In molti scenari i file sono in grado di svolgere il loro compito in maniera egregia, ma quando dobbiamo gestire una gran mole di dati sorgono problemi dovuti ai limiti imposti dai file, come l'impossibilità di accedere al contenuto di un file da parte di più utenti contemporaneamente oppure l'eccessivo uso di risorse nel caso di file di grosse dimensioni (nell'ordine dei GigaByte).
È in questo scenario che entrano in gioco i database. In questa guida faremo una breve introduzione ai database e vedremo cos'è MySQL, i suoi vantaggi e cos'è il linguaggio SQL. Nelle guide successive invece vedremo come utilizzare MySQL per creare applicazioni PHP potenti, efficienti e in grado di gestire una gran quantità di informazioni.
Indice dei contenuti
Un database, letteralmente base di dati, è una raccolta di dati organizzata in modo ordinato, così come una biblioteca può essere considerata una raccolta di libri.
Esistono diversi tipi di database: i primi ad essere utilizzati sono stati i database relazionali, seguiti dai database orientati agli oggetti nei primi anni 90 e dai database NoSQL che sono nati per soddisfare l'esigenza di maggiore velocità ed elaborazione dei dati non strutturati.
Il simbolo del database
Il modello più utilizzato ancora oggi è quello relazionale. Gli elementi di un database relazionale sono organizzati sotto forma di tabelle composte da colonne e righe. Questo tipo di database offre la soluzione più efficiente e flessibile per accedere alle informazioni.
Un database viene gestito tramite il DBMS (Database Management System), letteralmente sistema di gestione di database, ossia un software che consente il controllo e la gestione completa di un database.
Nella pratica, un DBMS funge da interfaccia tra il database e gli utenti finali consentendo tra le altre cose la creazione di database, la memorizzazione, l'interrogazione, la modifica e l'eliminazione dei dati, oltre alla gestione dell'integrità degli stessi.
Inoltre, un DBMS consente la gestione amministrativa di un database, offrendo operazioni quali monitoraggio delle performance, backup e ripristino dei dati.
La parola database viene utilizzata sia per riferirsi al database vero e proprio, sia per riferirsi al DBMS, dunque d'ora in avanti ci riferiremo al DBMS come al database.
PHP è in grado di gestire un gran numero di database, alcuni di questi sono: SQLite, MySQL, PostgreSQL, Oracle, Microsoft Access, Microsoft SQL Server, MongoDB. In generale è possibile utilizzare uno qualsiasi di questi database nelle nostre applicazioni PHP. Tuttavia in questa e nelle guide successive ci concentreremo su MySQL.
MySQL è uno dei più popolari database attualmente in uso sul web ed è senza dubbio il più popolare utilizzato in combinazione col linguaggio PHP. È open source ed è disponibile nel pacchetto di installazione di XAMPP.
MySQL offre numerosi vantaggi:
MySQL archivia i dati in tabelle come altri database relazionali. Una tabella è una raccolta di dati correlati ed è divisa in righe e colonne.
Ciascuna riga in una tabella rappresenta un set di dati intrinsecamente connessi tra loro, mentre ogni colonna rappresenta un campo specifico.
Ritornando all'esempio della biblioteca, un'ipotetica tabella di nome libri
potrebbe essere rappresentata in questo modo
+-----+-------------------------+------+
| id | titolo | anno |
+-----+-------------------------+------+
| 1 | Il signore degli anelli | 1955 |
| 2 | Shining | 1977 |
| 3 | Frankenstein | 1818 |
| 4 | Il Gattopardo | 1958 |
| 5 | La forma dell'acqua | 1994 |
+-----+-------------------------+------+
Id, titolo e anno rappresentano le colonne della tabella, mentre ciascuna riga contenente i valori di ogni colonna è un record. Vediamo come è possibile prelevare questi dati per poterli utilizzare nelle nostre applicazioni. Introduciamo allo scopo un nuovo linguaggio.
SQL, Structured Query Language, è il linguaggio utilizzato per comunicare con i database relazionali come MySQL. Con SQL è possibile eseguire qualsiasi operazione relativa ai database come la creazione di database e tabelle, il salvataggio dei dati l'aggiornamento e l'eliminazione dei dati e l'interrogazione di un database per specifici record.
Con SQL é possibile:
I comandi utilizzati per effettuare tali operazioni vengono chiamati query. Nei paragrafi seguenti vedremo la sintassi SQL per ciascuna delle operazioni appena elencate.
Per approfondire rimandiamo alla lettura della documentazione MySQL.
Tramite l'istruzione CREATE DATABASE
è possibile creare un nuovo database. È sufficiente indicare il nome del database dopo l'istruzione, come mostra il seguente esempio
CREATE DATABASE biblioteca
Una volta creata la struttura del database è necessario aggiungere le tabelle. È possibile farlo tramite il costrutto CREATE TABLE
seguito dal nome della tabella e dai campi.
Vediamo un esempio di utilizzo
CREATE TABLE `libri` (
`id` int(11) PRIMARY KEY NOT NULL,
`titolo` varchar(80) NOT NULL,
`anno` int(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `libri`
CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;
Con la query precedente abbiamo creato una tabella di nome libri
con i seguenti campi:
id
di tipo integertitolo
di tipo varcharanno
di tipo integerInoltre abbiamo definito il campo id
come chiave primaria e reso questo campo autoincrementante tramite la clausola AUTOINCREMENT
contenuta nella query successiva ALTER TABLE
, utilizzata per modificare la struttura di una tabella.
Inoltre ogni volta che viene inserito un nuovo record, il valore di id
viene incrementato in maniera automatica di una unità prendendo in considerazione il valore dell'ultimo id inserito.
L'inserimento di un nuovo record in una tabella già esistente viene effettuato tramite l'istruzione INSERT
INSERT INTO libri (id, titolo, anno) VALUES (0, 'La storia infinita', 1979)
La INSERT
prevede che la tabella che si vuole popolare esista e per ciascun campo venga rispettato il tipo.
Nota: specificando il valore 0 per il campo id, MySQL provvederà ad incrementarne il valore a partire dall'ultimo id inserito.
L'istruzione UPDATE
consente di modificare il contenuto di alcuni campi nei record che soddisfano una determinata condizione posta in WHERE
. Se non si indica nessuna condizione vengono modificati tutti i record.
Con la clausola SET
si indica il campo o i campi da modificare seguiti dal simbolo uguale e dal nuovo valore.
Vediamo un esempio di utilizzo per modificare un singolo campo
UPDATE libri SET anno = 1900 WHERE id = 4
e per modificare campi multipli
UPDATE libri SET anno = 1900, titolo = 'Nuovo titolo' WHERE id = 4
L'istruzione SELECT
consente di estrarre un elenco di record dalla tabella indicata nella clausola FROM
e che soddisfano una determinata condizione (opzionale) impostata tramite l'operatore WHERE
.
Di seguito è mostrato un esempio di query che restituisce tutti i titoli dalla tabella libri
SELECT titolo FROM libri
Se si esegue la query verranno restituiti i seguenti record
+-------------------------+
| titolo |
+-------------------------+
| Il signore degli anelli |
| Shining |
| Frankenstein |
| Il Gattopardo |
| La forma dell'acqua |
+-------------------------+
Se vogliamo ottenere il titolo del libro il cui codice è uguale a 128489
dobbiamo eseguire la stessa query precedente con l'istruzione WHERE
SELECT titolo FROM libri WHERE id = 2
che restituirà
+-------------------------+
| titolo |
+-------------------------+
| Shining |
+-------------------------+
L'eliminazione dei dati avviene tramite il costrutto DELETE
ed è possibile:
Per cancellare un record possiamo utilizzare la seguente interrogazione SQL
DELETE FROM libri WHERE id = 2
Una successiva interrogazione alla tabella libri
restituirà i seguenti record
+-------------------------+
| titolo |
+-------------------------+
| Il signore degli anelli |
| Frankenstein |
| Il Gattopardo |
| La forma dell'acqua |
+-------------------------+
Per cancellare tutti i record è sufficiente omettere l'istruzione WHERE
PHP mette a disposizione due estensioni per gestire un database MySQL:
Al posto di usare una di queste due estensioni, nelle applicazioni moderne è ormai d'uso comune l'utilizzo di un ORM (Object Relational Mapping), una tecnica di programmazione che consente di mappare in classi i dati del database consentendo al programmatore di sfruttare la programmazione ad oggetti.
Gli ORM verranno discussi nella guida avanzata dedicata allo sviluppo e manutenzione di applicazioni web professionali. Nella guida successiva invece analizzeremo MySQLi e le sue funzioni base per l'accesso e la gestione di un database MySQL in PHP.