Les instructions préparées en PHP

Les instructions préparées en PHP

  1. Objectifs

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

    • Deux manières sont offertes pour exécuter une requête:
      • Exécution Directe
        • Utilisation de la méthode query()
        • Utilisation de la méthode exec()
      • Requête préparée
        • Utilisation de la méthode préparée
    • Une requête préparée ou requête paramétrable est utilisée pour exécuter la même requête plusieurs fois, avec une grande efficacité.
    • L’exécution d’une requête préparée se déroule en deux étapes : la préparation et l’exécution. Lors de la préparation, un template de requête est envoyé au serveur de base de données. Le serveur effectue une vérification de la syntaxe, et initialise les ressources internes du serveur pour une utilisation ultérieure.



  3. Avantages

    • Par rapport à l’exécution directe d’instructions SQL, les instructions préparées présentent trois avantages principaux:
    • Les instructions préparées réduisent le temps d’analyse car la préparation de la requête n’est effectuée qu’une seule fois (bien que l’instruction soit exécutée plusieurs fois)
    • Les paramètres liés minimisent la bande passante vers le serveur car vous devez envoyer uniquement les paramètres à chaque fois, et non la requête entière
    • Les instructions préparées sont très utiles contre les injections SQL, car les valeurs des paramètres, qui sont transmises ultérieurement à l’aide d’un protocole différent, n’ont pas besoin d’être correctement échappées.
  4. Utilisation

    • La requête directe peut être changée de la manière suivante:
    • PDO prend en charge les espaces réservés positionnels (?) et nom ( :...)
    • Dans PDO, nous pouvons utiliser des espaces réservés positionnels et nommés. Pour les requêtes simples, personnellement, je préfère les espaces réservés positionnels, je les trouve moins verbeux, mais c’est entièrement une question de goût.

      Les instructions préparées en PHP

  5. La démarche à suivre pour utiliser une requête préparée

    1. Écrire la chaîne de requête comme paramètre de la méthode prepare() de l’objet PDO. Cette méthode retourne un objet de type PDOStatement qui représente la requête préparée et qui est noté $stmt dans notre exemple ci-dessus.
    2. Lier les paramètres dans l’ordre de leur apparition avec des valeurs ou des variables. Cette liaison peut se faire de plusieurs manières :
      • En créant un tableau associatif de la forme : $resultat->execute(array('cin'=>$_POST['txtRecherche'])); la variable $cin ayant déjà une valeur à ce stade. Ce tableau sera ensuite passé en paramètre à la méthode execute().
      • En appelant la méthode bindParam() des objets PDOStatement ou encore la méthode bindValue() pour chaque paramètre selon le modèle : bindParam(':cin',$cin,PDO::PARAM_STR) dans lequel le troisième paramètre désigne le type de la variable et peut prendre les valeurs PDO::PARAM_STR pour une chaîne et PDO::PARAM_INT pour un entier.
    3. Exécuter la requête en appelant la méthode execute() de l’objet PDOStatement avec le tableau comme paramètre, s’il a été créé à l’étape 2, ou sinon sans paramètre.
    4. Pour les requêtes préparées qui retournent des résultats, comme celles qui contiennent la commande SELECT, il faut ensuite lier les résultats à des variables PHP, avec la méthode bindColumn() selon les modèles :
      $regprep->bindColumn(1,$prenom)
      ou encore :
      $regprep->bindColumn(prenom,$prenom)

    5. Dans ce cas, la valeur de la colonne 1 désignée dans la requête sera contenue dans la variable $prenom, et ainsi de suite.
    6. Les lignes de résultats sont obtenues en appliquant une des méthodes vues précédemment, comme fetch() ou fetchAll(), à l’objet PDOStatement représentant la requête préparée, désignée ici par $stmt. Une ou plusieurs boucles, selon les cas, permet d’afficher les résultats en utilisant les variables créées à l’étape 4.
    7. Libérer la mémoire occupée par l’objet PDOStatement avec la méthode closeCursor().
  6. Sélection de plusieurs lignes

    • La récupération de plusieurs lignes à partir d’une requête préparée serait identique à celle d’une requête sans paramètres déjà affichés:
    • Les instructions préparées en PHP

    • Liaison des paramètres
      • Il existe plusieurs moyens de lier les paramètres avec des valeurs ou des variables. C’est à dire de remplacer les paramètres par les valeurs:
      • Soit on regroupe les valeurs dans un tableau et on passera ce tableau en paramètre à la méthode “execute” comme dans l’exemple ci-dessous, si on utilise des marqueur interrogatif “?

        Les instructions préparées en PHP

      • Soit on regroupe les valeurs dans un tableau associatif et on passera ce tableau en paramètre à la méthode exécute comme dans l’exemple ci-dessous, si on utilise des marqueurs nommés.
  7. Exercices d’application

    1. Exercice 01
      1. Énoncé
        • Utiliser la base de donnée “notes_des_étudiants“, crée dans la leçon précédente pour répondre aux questions suivantes:
          1. Remplir avec PhPMyAdmin la table “etudiants” avec des données fictives
          2. Utiliser la page connexionDB.php crée dans la leçon précédente pour ce connecter à la base de donnée.
          3. Créer une page php dont le nom est “affichageEtudiants.php” (utiliser template bootstrap5)
          4. Écrire un script php permettant d’afficher la liste des étudiants (Hommes), dans un tableau HTML, en utilisant deux méthodes différentes.
          5. Récupérer les étudiants (Hommes) dont le prénom contient la lettre ‘h’ dans la deuxième position.
          6. Afficher la liste des étudiantes (Femmes), dans un tableau HTML , en utilisant deux méthodes différentes.
          7. Récupérer les étudiantes (Femmes) dont le prénom contient la lettre ‘h’ dans la deuxième position.
        • Remarque : vous pouvez utiliser le fichier style.css
      2. Solution
        • Essayez de faire l’exercice de votre côté avant de regarder la solution !
    2. Exercice 02
      1. Énoncé
        1. Soit la base de données "gestiondesapprenants" dont le dictionnaire de données ci-dessous.
        2. Créer un script PHP nommé connect.php contenant uniquement les variables de connexion.
        3. Créer le squelette d’une page web classique (en-tête, corps, etc.). La sauvegarder sous le nom connexion.php.
        4. Inclure le fichier connect.php dans connexion.php, puis créer un nouvel objet PDO (PHP Data Object) permettant de vous connecter à MySQL en utilisant les informations saisies dans la page connect.php.
        5. Ajouter au script connexion.php des instructions de gestion d’erreur (try, catch). En cas de connexion non réussie, afficher l’erreur standard renvoyée par la méthode getMessage().
        6. Affichage par ligne
          • Créer une page PHP nommé affichageCode.php,la page doit correspondre au schémas suivant:
          • Pour créer la page, utiliser le célèbre framework CSS bootstrap4.
          • Pour les champs liées (cdeGouvernorat,cdeGroupe et cdeUser) et le champs civilité afficher les valeur réels de ces champs.
        7. Affichage multiple
          • Créer une page PHP nommé rechercheMultiple.php,la page doit correspondre au schémas suivant:

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



Abonnez vous à notre chaîne YouTube gratuitement