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

Accéder aux bases de données avec Mysqli 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. Présentation

    • Il existe trois API principales pour se connecter à MySQL :
      • Accéder aux bases de données avec PHP

      • L’extension mysql (pour les versions PHP < 4.1.3)
        • 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 vieilles, et on recommande de ne plus les utiliser aujourd’hui.
      • L’extension mysqli (mysql improved pour les versions PHP > 5)
        • L’extension mysqli_ : ce sont des fonctions améliorées d’accès à MySQL.
      • PHP Data Objects (PDO)
        • PHP Data Objects (PDO) qui a des fonctionnalités moins avancées que mysqli mais permet de travailler avec différentes bases de données en conservant le même code.

      Il est recommandé d’utiliser soit l’extension mysqli, soit l’extension PDO_MySQL. Il n’est pas recommandé d’utiliser l’ancienne extension mysql pour de nouveaux développements sachant qu’elle est obsolète depuis PHP 5.5.0, et a été supprimée en PHP 7.

    • Il existe une différence notable entre ces deux API : l’extension MySQLi ne va fonctionner qu’avec les bases de données MySQL tandis que PDO va fonctionner avec 12 systèmes de bases de données différents.
    • Nous utiliserons dans ce cours l’API PDO.
    • L’ extension Mysqli peut être utilisée de manière procédurale ou orientée objet. De manière procédurale, les fonctions sont appelées, tandis que de manière orientée objet, un objet classe est utilisé pour effectuer des opérations sur la base de données.



  4. Exemple #1 Comparaison des 3 APIs MySQL

    • Acceder aux bases de données avec Mysqli de PHP

  5. Étapes pour se connecter à une base de données

      • La connexion et l’exploitation d’une base MySQL avec PHP s’effectue en plusieurs étapes :
    1. ouverture d’une connexion à MySQL et sélection de la base de données
      • Les API peuvent être procédurale ou orientée objet. Avec une API procédurale, vous pouvez appeler les fonctions pour exécuter des commandes ; avec une API orientée objet, vous devez créer des objets et appeler les méthodes de ces objets.
      • Pour se connecter à la base de données il faut fournir un nom de domaine, une adresse IP ou un alias,un login et un mot de passe.
        • host (hôte) : Facultatif. Spécifie un nom d’hôte ou une adresse IP
        • username(nom d’utilisateur) : Facultatif. Spécifie le nom d’utilisateur MySQL
        • password (mot de passe) : Facultatif. Spécifie le mot de passe MySQL
        • dbname (nom base de données): Facultatif. Spécifie la base de données par défaut à utiliser
        • port :Facultatif. Spécifie le numéro de port pour tenter de se connecter au serveur MySQL
        • socket: Facultatif. Spécifie le socket ou le tube nommé à utiliser
      • Syntaxe
        • Style orienté objet:
          • $mysqli = new mysqli(host, username, password, dbname, port, socket)
        • Style procédural:
          • $mysqli_connect(host, username, password, dbname, port, socket)
      • Vérifier la connexion
        • Style orienté objet:
          • Acceder aux bases de données avec Mysqli de PHP

        • De manière procédurale, la fonction mysqli_connect est utilisée. La fonction mysql_connect ouvre une connexion au serveur de base de données et l’objet de connexion est renvoyé. Si la connexion à la base de données échoue, mysqli_connect_errno () renvoie une erreur.
        • De manière orienté objet, la fonction mysqli est appelée et un objet est retourné. En cas d’échec de la connexion à la base de données, une erreur est générée.
        • Exemple:
          • Accéder aux bases de données avec Mysqli de PHP

    2. Sélection d’enregistrements
      • Les enregistrements de la base de données peuvent être exploités de manière procédurale ou orientée objet.
      • La fonction mysqli_query est utilisée pour effectuer une requête sur la base de données.
      • Une fois connecté à la base de données, à l’ objet de connexion une requête est transmise à mysqli_query et renvoie un ensemble de résultats.
      • Il existe plusieurs fonctions permettant de récupérer les résultats à partie de l’objet ou du descripteur de résultat. Cet objet ou ce descripteur est essentiel pour accéder aux lignes renvoyées par la requête
      • mysqli_fetch_assoc
        • La fonction mysqli_fetch_assoc () est utilisée pour renvoyer un tableau associatif représentant la ligne suivante dans le jeu de résultats pour le résultat représenté par le paramètre resultat , où chaque clé du tableau représente le nom d’une des colonnes du jeu de résultats.
        • L’ensemble de résultats est transmis à la fonction mysqli_fetch_assoc et renvoie une ligne de données sous forme de tableau associatif.
        • Style orienté objet:
          • Acceder aux bases de données avec Mysqli de PHP

        • Style procédural:
          • $ sqlquery = "requête sql" ;
            if ( $ resultat = mysqli_query ( $ conn, $ sqlquery ) ) {  
                / * récupère le tableau associatif * /
                while ( $ ligne = mysqli_fetch_assoc ( $ resultat ) ) {  
                    echo $ ligne [ "nom du champs 1 dans la requête" ] .
             "" . $ ligne [ "nom du champs 2 dans la requête" ] .
             "" . $ ligne [ 'nom du champs 3 dans la requête' ] . "<br />" ;
                }
                / * jeu de résultats gratuit * /
                mysqli_free_result ( $ result ) ;
            }
      • mysqli_fetch_array
        • La fonction mysqli_fetch_array est utilisée pour récupérer les enregistrements de la base de données. Il récupère une seule ligne de l’ensemble de résultats
        • La fonction mysqli_fetch_array retourne une ligne de résultat sous la forme d’un tableau associatif, d’un tableau indexé, ou les deux
        • Style orienté objet:
          • $ query = "requête sql" ;
            $ resultat = $ mysqli-> query ( $ sqlquery ) ;
            / * Récupère le résultat sous forme de tableau numérique * /
            $ ligne = $ result- > fetch_array ( MYSQLI_NUM ) ;
            echo $ ligne [ 0 ] . "" . $ ligne [ 1 ] . "" . $ ligne [ 2 ] . "<br />" ;
            / * tableau associatif * /
            $ ligne = $ result- > fetch_array ( MYSQLI_ASSOC ) ;
            echo $ ligne [ "nom du champs 1 dans la requête" ] .
             "" . $ ligne [ "nom du champs 2 dans la requête" ] .
             "" . $ ligne [ 'nom du champs 3 dans la requête' ] . "<br />" ;
            / * Tableau associatif et numérique * /
            $ ligne = $ result- > fetch_array ( MYSQLI_BOTH ) ;
            echo $ ligne [ 0 ] . "" . $ ligne [ "nom du champs 2 dans la requête" ] . 
            "" . $ ligne [ 2 ] ;
            / * jeu de résultats gratuit * /
            $ result-> free ( ) ;
        • Style procédural:
          • $ query = "requête sql" ;
            $ result = mysqli_query ( $ conn, $ sqlquery ) ;
            / * tableau numérique * /
            $ ligne = mysqli_fetch_array ( $ resultat, MYSQLI_NUM ) ;
            echo $ ligne [ 0 ] . "" . $ ligne [ 1 ] . "" . $ ligne [ 2 ] ;
            / * tableau associatif * /
            $ ligne = mysqli_fetch_array ( $ result, MYSQLI_ASSOC ) ;
            echo $ ligne [ "nom du champs 1 dans la requête" ] .
             "" . $ ligne [ "nom du champs 2 dans la requête" ] . 
            "" . $ ligne [ 'nom du champs 3 dans la requête' ] ;
            / * tableau associatif et numérique * /
            $ ligne = mysqli_fetch_array ( $ result, MYSQLI_BOTH ) ;
            echo $ ligne [ 0 ] . "" . $ ligne [ "nom du champs 2 dans la requête" ] . 
            "" . $ ligne [ 2 ] ;
            / * jeu de résultats gratuit * /
            mysqli_free_result ( $ resultat ) ;
      • mysqli_fetch_all
        • La fonction mysqli_fetch_all() est utilisée pour récupérer toutes les lignes et renvoie l’ensemble de résultats sous forme de tableau associatif.
        • Style orienté objet:
          • $ resultat = mysqli_query ( $ conn, "requête sql" ) ;
            // Récupère tous les enregistrements
            $resultat -> fetch_all(MYSQLI_ASSOC);
            // Jeu de résultats gratuit
            $resultat -> free_result() ;
        • Style procédural:
          • $ resultat = mysqli_query ( $ conn, "requête sql" ) ;
            // Récupère tous les enregistrements
            mysqli_fetch_all ( $ result, MYSQLI_ASSOC ) ;
            // Jeu de résultats gratuit
            mysqli_free_result ( $ result ) ;
    3. Vérification d’existence des données dans la base de données
      • mysqli_num_rows ()
        • La fonction mysqli_num_rows () est une fonction intégrée en PHP qui est utilisée pour renvoyer le nombre de lignes présentes dans le jeu de résultats.
        • Style orienté objet:
            • <?php
              /* Détermine le nombre de lignes du jeu de résultats */
              $nombreLignes = $resultat->num_rows;
              ?>
        • Style procédural:
            • <?php
              /* Détermine le nombre de lignes du jeu de résultats */
              $nombreLignes =mysqli_num_rows($resultat);
              ?>
    4. Fermeture de la connexion à MySQL
      • Normalement, la fermeture de la connexion se fait automatiquement, mais afin de s’en assurer, on peut utiliser la méthode close()
      • Style orienté objet:
          • <?php
            $mysqli->close();
            ?>
      • Style procédural:
          • <?php
            $mysqli_close(&conn);
            ?>
  6. Application

    1. Enoncé
      • Soit une base de données gestion_apprenants mySQL
      • Cette base est représentée par le schéma suivant:
      • Accéder aux bases de données avec Mysqli de PHP

      • Donner le code PHP pour se connecter à cette base de données en utilisant l’API mysqli de PHP avec ses deux styles (Chaque style dans une page comme suit)
        1. Une page connexion_p.php contenant un script php pour se connecter au base de données avec l’API mysql en utilisant le style procédural
        2. Une page connexion_oo.php contenant un script php pour se connecter au base de données avec l’API mysql en utilisant le style orienté Objet
      • Créer une page index.php contenant deux boutons appelants les deux pages crées.
      • Dans la page index.php, créer les boutons suivants sous celles crées précédemment
      • Num ligne Type Nom couleur Valeur
        2 submit name="affichage_assoc_p" warning Affichage avec mysqli_fetch_assoc_pro
        2 submit name="affichage_assoc_oo" warning Affichage avec mysqli_fetch_assoc_OO
        2 submit name="affichage_all_p" info Affichage avec mysqli_fetch_all_pro
        2 submit name="affichage_all_oo" info Affichage avec mysqli_fetch_all_OO
        3 submit name="affichage_array_p" success Affichage avec mysqli_fetch_array_pro
        3 submit name="affichage_array_oo" success Affichage avec mysqli_fetch_array_OO
      • Le résultat souhaité sera
      • Accéder aux bases de données avec Mysqli de PHP

  7. Solution
    • Essayez de faire l’exercice de votre côté avant de regarder la Solution !



Abonnez vous à notre chaîne YouTube gratuitement