<?php
try {
 // == Connexion de la base de données ==
 $bdd = new PDO('mysql:host=localhost;dbname=CoursPHP', 'root', 'mot_de_passe');
 $bdd->exec("SET CHARACTER SET utf8"); // Codage en UTF8 --
 // = On récupère la structure de la table (nom des champs) =
 $struture_table = $bdd->query('DESCRIBE personnes');
 if (!$struture_table)
     throw new Exception('Problème de requête sur la table.');
 // -- Par défaut, fetch retourne un tableau associatif --
 $struture_table->setFetchMode(PDO::FETCH_ASSOC);
 echo "------------------------------".PHP_EOL;
 // -- Boucle d'affichage du nom des champs --
 while ($Liste_Champs = $struture_table->fetch()) {
  $NomChamp=$Liste_Champs['Field'];
  echo "$NomChamp\t";
 }
 echo PHP_EOL;
 echo "------------------------------".PHP_EOL;
 // == On récupère les données de la table ==
 $reponse = $bdd->query('SELECT * FROM personnes');
 // -- Traitement des erreurs de retour sur la requête --
 if (!$reponse)
   throw new Exception('Problème de requête sur la table.');
 // -- Affichage des données retournées --
 // -- par défaut, chaque récupération par fetch retourne --
 // -- un tableau associatif --
 $reponse->setFetchMode(PDO::FETCH_ASSOC); 
 // -- Boucle de traitement de chaque personne -- 
 while ($une_personne = $reponse->fetch()) {
   foreach($une_personne as $NomChamp => $ContenuChamp) {
    echo "$une_personne[$NomChamp]"."\t";
   }
   echo PHP_EOL;
 }
 $reponse->closeCursor();// Fermeture de la requête
 $bdd = NULL            ; // Fermeture de la connexion
}
catch(Exception $e) {
 echo 'Erreur : '.$e->getMessage();
}
?>
