Accéder aux bases de données avec PDO de PHP

Accéder aux bases de données avec PDO de PHP

  1. Objectifs

    • Être capable d’utiliser les API php pour accéder à une base de données MySQL
  2. Prérequis

    • Pour pouvoir comprendre au mieux ce tutoriel, quelques connaissances sont requises.
      • MySQL: Vous devez savoir ce qu’est une BDD (base de données), ainsi que tout le vocabulaire comme : table, champ, ligne, requête SQL, …
      • Il vous est aussi conseillé de connaître les bases du langage SQL pour pouvoir comprendre les requêtes de base.
  3. Définition

    • PDO (PHP Data Objects) est une extension définissant l’interface pour accéder à plusieurs types de base de données, fournie automatiquement depuis PHP 5.1.
    • Fournit une interface d’abstraction à l’accès aux données, plus sécurisé (si bien utilisé)
    • PDO (PHP Data Objects) est une extension PHP qui définit une interface d’accès à une base de données.
    • Il est inclus dans PHP depuis sa version 5.1. Pour la version 5.0, vous pouvez l’obtenir avec l’extension PECL.
    • Son principal avantage est qu’il permet une abstraction pour l’accès aux données. C’est-à-dire que les fonctions pour exécuter des requêtes et pour récupérer des données sont les mêmes, quelque-soit le serveur SQL utilisé (MySQL, PostgreSQL, …).
    • Avec ce système, pour utiliser plusieurs SGBD il n’est pas nécessaire de changer les fonctions de communication dans tout le code, mais seulement les arguments envoyés au constructeur.
  4. Présentation

    • PHP propose plusieurs moyens de se connecter à une base de données MySQL
      • L’extension mysql_
        • Ce sont des fonctions qui permettent d’accéder à une base de données MySQL et- donc de communiquer avec MySQL. Leur nom commence toujours par mysql_.Toutefois, ces fonctions sont vielles et on recommande de ne plus les utiliser aujourd’hui
      • L’extension mysqli_
        • ce sont des fonctions améliorées d’accès à MySQL elle proposent plus de fonctionnalités et sont plus à jour.
      • L’extension PDO
        • c’est un outil complet qui permet d’accéder à n’importe quel type de base de données. On peut donc l’utiliser pour se connecter aussi bien à MySQL que PosigreSQL ou Oracle.
        • Ce sont toutes des extensions car PHP est très modulaire. On peut très facilement ajouter ou supprimer des éléments à
        • PHP, car tout le monde n’a pas forcément besoin de toutes les fonctionnalités.
        • Les fonctions mysql_ ne. sont plus à utiliser (on dit qu’elles sont "obsolètes"). Il reste à choisir entre mysqli_ et PDO. Nous allons ici utiliser PDO car c’est cette méthode d’accès aux bases de données qui sera la plus utilisée dans les prochaines versions de PHP.
        • Par ailleurs, le gros avantage de PDO est que vous pouvez l’utiliser de la même manière pour vous connecter à n importe quel autre type de données (PostgreSQL, Oracle…).
    • L’extension PDO comporte trois classes :
      • La classe PDO, qui permet de créer des objets représentant la connexion à la base et qui dispose des méthodes permettant de réaliser les fonctions essentielles, à savoir l’envoi de requête, la création de requêtes préparées et la gestion des transactions.
      • La classe PDOStatement, qui représente, par exemple, une requête préparée ou un résultat de requête SELECT. Ses méthodes permettent de gérer les requêtes préparées et de lire les résultats des requêtes.
      • La classe PDOException qui permet de gérer et d’afficher des informations sur les erreurs à l’aide d’objets.



  5. Activez PDO de PHP

    • Normalement, PDO est activé par défaut. Pour le vérifier (figure suivante), faites un clic gauche sur l’icône de WAMP dans la barre des tâches, puis allez dans le menu PHP/Extensions PHP et vérifiez que l’option pdo_mysql est bien cochée.
    • Accéder aux bases de données avec PDO de PHP

  6. Se connecter à MySQL avec PDO

    • Pour accéder à une base de données MySQL de nom ma_bdd accessible sur le port mon_port du serveur mon_serveur avec l’identifiant mon_identifiant associé au mot de passe mon_mdp, le code sera le suivant :
    • Accéder aux bases de données avec PDO de PHP

    • $connexion = new PDO("mysql:host=...;dbname=...;port=..", "mon_identifiant", "mon_mdp");
    • La ligne qu’on vient d’écrire crée un objet $connexion, qui représente la connexion à la base de données. On crée la connexion en indiquant dans les paramètres et en respectant cet ordre:
        1. Le nom d’hôte (localhost)
        2. Le nom de la base de données(ma_base)
        3. Le login(root)
        4. Le mot de passe (”)

        Nous appellerons ce fichier connexion.php et nous utiliserons la fonction require_once pour l’appeler dans notre programme PHP.
        <?php
        require_once("connexion.php");
        ?>

  7. Tester la présence d’erreurs

    • Si vous avez renseigné les bonnes informations (nom de l’hôte, de la base, le login et le mot de passe), rien ne devrait s’afficher à l’écran.
    • Toutefois, s’il y a une erreur (vous vous êtes trompés de mot de passe ou de nom de base de données, par exemple), PHP risque d’afficher toute la ligne qui pose l’erreur, ce qui inclut le mot de passe !
    • Il est préférable de traiter l’erreur. En cas d’erreur, PDO renvoie ce qu’on appelle une exception qui permet de <capturer< l’erreur.
    • try {
       $maConnexion = new PDO($dns, $user, $mdp);
       // autres commandes
      }
      catch (PDOException $e) {
      die ("Erreur de connexion à la base de donnée : " .$e->getMessage());
      }
    • La fonction die([optional_string_message]) est une fonction php simple à utiliser. Elle a pour but de stopper l’exécution de votre script et d’afficher le message que vous aurez éventuellement spécifié.
    • Son emploi est très courant pour gérer les erreurs de connexion aux bases de données ou les erreurs de chemin lors des inclusions.
  8. Traiter les requêtes SQL avec l’objet PDO

    • L’objet PDO propose deux méthodes pour réaliser des requêtes SQL sur la base.
      • PDO::query pour les requêtes SELECT
      • PDO::exec pour les requêtes INSERT, UPDATE et DELETE.(Exécuter une instruction SQL et renvoyer le nombre de lignes affectées)
    • Exécution de requêtes. PDO :: query ()
      • Accéder aux bases de données avec PDO de PHP

    • La méthode query() renvoie un objet de type PDOStatement.
    • La méthode fetch() renvoie un tableau associatif dont les clés sont le nom des champs. Avec while, on parcoure le résultat de la requête ligne par ligne à la manière d’un foreach.
  9. Exercice d’application

      1. Énoncé
        1. Soit la base de données "notes_des_étudiants" dont le modèle logique relationnel est donnée ci-dessous.
          • etudiants ( #numetu, nom, prenom,genre, datenaiss, rue, cp, ville)
            CREATE TABLE `etudiants` (`numEtud` INT(11) NOT NULL ,
                                      `nomEtud` VARCHAR(100) NOT NULL ,
                                      `prenomEtud` VARCHAR(100) NOT NULL ,
                                      `genre` ENUM('Homme','Femme') NOT NULL ,
                                      `dteNaissance` DATE NOT NULL ,
                                      `rue` INT NOT NULL ,
                                      `cp` INT NOT NULL ,
                                      `ville` INT NOT NULL ,
                                      PRIMARY KEY (`numEtud`)) ENGINE = InnoDB;
            
          • matieres (codeMat, libelleMat, coefMat)
          • CREATE TABLE `notes_des_etudiants`.`matieres` ( `codeMat` INT NOT NULL , 
            `libelleMat` VARCHAR(200) NOT NULL , `coefMat` FLOAT NOT NULL , PRIMARY KEY (`codeMat`)) ENGINE = InnoDB;
            
          • epreuves (numepreuve, datepreuve, lieu, codemat#)
          • CREATE TABLE `notes_des_etudiants`.`epreuves` ( `numEpr` INT NOT NULL , 
            `dteEpr` DATE NOT NULL , `lieuEpr` VARCHAR(100) NOT NULL , `codeMat` INT NOT NULL , PRIMARY KEY (`numEpr`)) ENGINE = InnoDB;
            
          • NOTATION (numetu#, numepreuve#, note)
          • CREATE TABLE `notes_des_etudiants`.`notations` ( `numEtud` INT(11) NOT NULL , 
            `numEpr` INT(11) NOT NULL , `note` FLOAT NOT NULL , PRIMARY KEY (`numEpr`)) ENGINE = InnoDB;
            
        2. Se connecter à phpMyAdmin (interface web écrite en PHP qui permet de gérer des bases de données MySQL).
        3. Depuis l’onglet "Bases de données" créer une nouvelle base de données nommée "notes_des_étudiants".
        4. Créer un script PHP nommé connect.php contenant uniquement l’affectation de valeurs aux variables listées ci-dessous.
          • $host = “localhost”;
          • $user = “root”;
          • $password = “”;
          • $dbname = "notes_des_étudiants";
        5. Créer le squelette d’une page web classique (en-tête, corps, etc.). La sauvegarder sous le nom connexionDB.php.
        6. Inclure le fichier connect.php dans connexionDB.php, puis créer un nouvel objet PDO (PHP Data Object) permettant de vous connecter à MySQL en utilisant les informations saisies dans connect.php. Tester. Remarque ?
        7. Ajouter au script connexionDB.php des instructions de gestion d’erreur (try, catch). En cas de connexion réussie, afficher un message du type "Connexion réussie ". En cas d’erreur, afficher l’erreur standard renvoyée par la méthode getMessage().
        8. Tester de nouveau en introduisant des erreurs dans le nom du serveur, de la base de données et dans le couple (login, mot de passe) dans le fichier connect.php, puis rétablissez la connexion correctement.
      2. Solution
        • Accéder aux bases de données avec PDO de PHP



Abonnez vous à notre chaîne YouTube gratuitement