In una precedente lezione abbiamo analizzato le funzioni a disposizione per gestire il formato JSON con PHP. Vediamo ora come possiamo utilizzare alcune di queste funzioni per recuperare dei dati da un database e trasformarli in JSON.
In questa lezione faremo uso dell'estensione PDO che ci consente di accedere al database ed effettuare query. Per approfondire l'argomento si può fare riferimento alla guida apposita.
Gli esempi di questo articolo utilizzano il linguaggio MySQL, PDO è però un layer di astrazione che consente di connetterci anche a database differenti.
La struttura dati
Prima di procedere creiamo una struttura dati e popoliamola con alcuni dati di prova:
CREATE TABLE user (
id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
firstName VARCHAR(100) NOT NULL ,
lastName VARCHAR(100) NOT NULL ,
email VARCHAR(100) NOT NULL ,
PRIMARY KEY ('id')
) ENGINE = InnoDB;
INSERT INTO user (id, firstName, lastName, email)
VALUES (NULL, 'Simone', 'D\'Amico', 'simone@email.it'),
(NULL, 'Mario', 'Rossi', 'mario@email.it');
Connessione al database
Il prossimo step consisterà nel creare la connessione al database che ci permetterà di effettuare le query per recuperare i dati:
$user = 'root';
$password = 'root';
$db = 'test';
$host = 'localhost';
$port = 8889;
$conn = new PDO("mysql:host=$host; dbname=$db; port=$port", $user, $password);
Recuperare i dati e convertirli in JSON
Ora che abbiamo un accesso al database possiamo effettuare le nostre query e convertire il risultato in un array JSON popolati con gli utenti presenti nel database.
$result = [];
$stmt = $conn->query("SELECT * FROM user");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$result[] = $row;
}
echo json_encode($result);
Il codice appena mostrato effettua la query al nostro database recuperando gli utenti; ciclando sui risultati creiamo un array che li contiene tutti. A questo punto grazie alla funzione json_encode()
possiamo restituire l'array in formato JSON.
Il risultato che otterremo è il seguente:
[
{
id: "1",
firstName: "Simone",
lastName: "D'Amico",
email: "simone@email.it"
},
{
id: "2",
firstName: "Mario",
lastName: "Rossi",
email: "mario@email.it"
}
]