In una delle scorse lezioni abbiamo introdotto le funzioni per creare un file XML. In questa lezione vedremo come utilizzarle per realizzare un file XML recuperando le informazioni da un database.
In questa lezione faremo uso dell'estensione PDO che ci consente di accedere al database ed effettuare le necessarie query. Per approfondire l'argomento si può fare riferimento alla guida apposita.
Gli esempi di questo articolo utilizzano il database MySQL, ma PDO è un livello di astrazione che consente di connetterci anche a database differenti.
La struttura dati
Per procedere riprendiamo la stessa struttura dati della lezione relativa alla creazione di un file JSON da database e popoliamola con gli stessi 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
Anche in questo caso aggiungiamo 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 XML con gli utenti presenti nel database.
$xml = new SimpleXMLElement('<users/>');
$stmt = $conn->query("SELECT * FROM user");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$user = $xml->addChild('user');
foreach ($row as $key => $value) {
$user->addChild($key, $value);
}
}
echo $xml->asXML();
Il codice appena visto effettua la query al nostro database recuperando tutti gli utenti; ciclando sui risultati andiamo a creare il nostro XML. Oltre al ciclo per i risultati provenienti dal database, abbiamo bisogno di un altro che recupera i vari campi provenienti dall'utente e li aggiunge all'elenco.
Il risultato che otteniamo è il seguente:
<?xml version="1.0"?>
<users>
<user>
<id>1</id>
<firstName>Simone</firstName>
<lastName>D'Amico</lastName>
<email>simone@email.it</email>
</user>
<user>
<id>2</id>
<firstName>Mario</firstName>
<lastName>Rossi</lastName>
<email>mario@email.it</email>
</user>
</users>