Médiaforma

All posts tagged table

Vous avez découvert et expérimenté les requêtes SQL dans la console MySQL. Tout ce qui a été dit est également utilisable en PHP.

Voyons comment interroger une table

Après avoir créé un objet PDO :

$base = new PDO('mysql:host=localhost; dbname=nombdd', 'root', '');

Vous pouvez effectuer des sélections dans une table en utilisant la méthode query() :

$retour = $base->query("requête");

Où requete représente la requête SQL que vous voulez exécuter. Vous pouvez par exemple utiliser les requêtes s uivantes :

Requête Effet
SELECT * FROM table; Affiche tous les enregistrements de la table spécifiée
SELECT nom FROM table; Affiche toutes les valeurs du champ nom de la table spécifiée.
SELECT * FROM table WHERE ch=valeur; Affiche tous les champs de la table spécifiée pour lesquels le champ ch vaut valeur.
SELECT * FROM table WHERE ch=valeur ORDER BY ch2 ASC; Affiche tous les champs de la table spécifiée pour lesquels le champ ch vaut valeur, en classant les réponses par champ ch2 croissants.
SELECT COUNT(*) FROM table; Compte le nombre d’enregistrements de la table spécifiée.

 

Pour parcourir le résultat de la requête, vous utiliserez la méthode fetch() :

while ($data = $retour->fetch()) {
  echo $data['champ']."<br>"; // Liste les valeurs du champ spécifié
}

Une fois les traitements effectués, détruisez l’objet PDO. avec cette instruction :

$base=null;


Interrogez la table orders et affichez les champs OrderID, Customer et ShipCity des enregistrements dont le champ ShipCountry vaut France.

Solution

Faites une pause dans la vidéo pour vous permettre de définir le code. Vous pourrez poursuivre le visionnage de la vidéo pour prendre connaissance de la solution.

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Accès à la table orders de la bdd Northwind avec PDO</title>
    <style>
      td { padding-right: 30px;}
    </style>
  </head>
  <body>
    <?php
      try {
        $base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');
      }
      catch(exception $e) {
        die('Erreur '.$e->getMessage());
      }
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base->query('SELECT OrderID, Customer, ShipCity FROM orders WHERE ShipCountry="France"');
      echo "<table>";
      while ($data = $retour->fetch()){
        echo "<tr><td>".$data['OrderID']."</td>";
        echo "<td>".$data['Customer']."</td>";
        echo "<td>".$data['ShipCity']."</td></tr>";
      }
      echo "</table>";
      $base = null;
    ?>
  </body>
</html>

La base de données est ouverte en créant un objet PDO.

Si une erreur se produit à l’ouverture de la base, elle est affichée et le programme s’arrête

Si tout s’est bien passé, on indique que l’encodage à utiliser est UTF-8

Puis une requête SQL est appliquée à la table orders. Cette requête récupère les champs OrderID, Customer et Shipcity pour lesquels le champ shipcountry vaut France.

Les données filtrées par la requête sont obtenues avec la fonction fetch. Une boucle while permet de parcourir toutes les données de la table. Les champs de chaque enregistrement sont alors affichés dans les colonnes d’un tableau HTML.

Enfin, l’objet PDO $base est supprimé pour mettre fin à la connexion.

Exécutons ce script dans WAMP Server. Voici le résultat.

 


Affichez tous les champs de tous les enregistrements de la table customers dans un tableau.

Solution

Faites une pause dans la vidéo pour vous permettre de définir le code. Vous pourrez poursuivre le visionnage de la vidéo pour prendre connaissance de la solution.

Voici le code à utiliser :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Accès à la bdd testconsole avec PDO</title>
  </head>
  <body>
    <?php
      try {
        $base = new PDO('mysql:host=localhost; dbname=northwind', 'root', '');
      }
      catch(exception $e) {
        die('Erreur '.$e->getMessage());
      }
      $base->exec("SET CHARACTER SET utf8");
      $retour = $base->query('SELECT * FROM customers');
      echo "<table>";
      while ($data = $retour->fetch()){
        echo "<tr><td>".$data['CustomerID']."</td>";
        echo "<td>".$data['CompanyName']."</td>";
        echo "<td>".$data['ContactName']."</td>";
        echo "<td>".$data['ContactTitle']."</td>";
        echo "<td>".$data['Address']."</td>";
        echo "<td>".$data['City']."</td>";
        echo "<td>".$data['PostalCode']."</td>";
        echo "<td>".$data['Country']."</td></tr>";
      }
      echo "</table>";
      $base = null;
    ?>
  </body>
</html>

La base de données est ouverte en créant un objet PDO.

Si une erreur se produit à l’ouverture de la base, elle est affichée et le programme s’arrête

Si tout s’est bien passé, on indique que l’encodage à utiliser est UTF-8

Puis une requête SQL est appliquée à la table customers. Cette requête retourne tous les champs de tous les enregistrements de la table customers.

Les données filtrées par la requête sont obtenues avec la fonction fetch. Une boucle while permet de parcourir toutes les données de la table. Les champs de chaque enregistrement sont alors affichés dans les colonnes d’un tableau HTML.

Enfin, l’objet PDO $base est supprimé pour mettre fin à la connexion.


Pour se connecter à une base de données MySQL, nous utiliserons une approche objet avec l’extension PDO (PHP Data Object). La technique étudiée ici est utilisable sur d’autres bases de données. Par exemple PostgreSQL ou Oracle.

Activer PDO

Avant de pouvoir utiliser PDO, vous devez activer cette extension. En principe, elle devrait être activée par défaut par WampServer. Pour le vérifier, cliquez sur l’icône de WampServer dans la zone de notification, pointez PHP puis Extensions PHP. Une coche devrait être affichée devant php_pdo_mysql, comme dans la figure ci-contre.

Si l’extension php_pdo_mysql n’est pas précédée d’une coche, cliquez dessus, fermez puis redémarrez WampServer. L’extension php_pdo_mysql devrait maintenant être activée.

Remarque
Si vous n’utilisez pas WampServer, vous pouvez activer/désactiver l’extension php_mysql en agissant sur le fichier php.ini (dossier Apache 2.x.x\bin\). Recherchez la ligne contenant le terme “php_pdo_mysql”. Supprimez le “;” qui la précède pour activer l’extension ou insérez un “;” pour la désactiver. Ici par exemple, l’extension php_pdo_mysql est active :


Pour supprimer une table, cliquez sur la base de données dans laquelle elle est stockée dans le volet droit de phpMyAdmin, cochez la case affichée devant le nom de la table à supprimer puis cliquez sur Supprimer :

Remarque
Vous pouvez également vider la table, c’est-à-dire supprimer son contenu en conservant sa structure. Pour cela, sélectionnez la table à vider et cliquez sur Vider.

Pour sélectionner certains enregistrements d’une table en fonction de leur contenu, sélectionnez l’onglet SQL. Une requête vous est proposée par défaut :

SELECT * FROM ‘utilisateurs’ WHERE 1

Cliquez sur Exécuter pour l’exécuter. Comme vous pouvez le voir, tous les enregistrements de la table sont sélectionnés et affichés :

Sans entrer dans le détail, je vais vous montrer comment sélectionner les enregistrements dont le champ prenom a pour valeur Pierre.

Cliquez sur l’onglet pour réinitialiser son contenu. Modifiez la requête SQL comme ceci :

SELECT * FROM `utilisateurs` WHERE prenom=”Pierre”

Cliquez sur Exécuter. Seuls les deux enregistrements dont le champ prenom vaut Pierre sont maintenant sélectionnés :


Pour entrer des données dans la table utilisateurs de la base formation, développez l’élément formation, cliquez sur utilisateurs, puis basculez sur l’onglet Insérer.

Utilisez les cinq zones de texte multilignes pour entrer les données :

Pour vous entraîner, saisissez les données suivantes :

nom prenom login password email
Durand Eric eDurand pass1 e.durand@fai.com
Terec Pierre pTerec pass2 p.terec@fai.com
Valmont Judy jValmont pass3 j.valmont@fai.com
Crouzet Patrick pCrouzet pass4 p.crouzet@fai.com
Vertec Pierre pVertec pass5 p.vertec@fai.com

 

Faites une pause dans la vidéo. Poursuivez la lecture lorsque toutes les données auront été saisies.

Sélectionnez l’onglet Afficher. Voici ce que vous devriez obtenir :