IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Introduction à PHP 5 par l'exemple


précédentsommairesuivant

IX. Exercice IMPOTS avec MySQL

Nous avons déjà écrit trois versions de cet exercice. La dernière version utilisait une classe de calcul de l'impôt. Cette classe prenait dans un fichier texte, les données permettant ce calcul. Elle va désormais les prendre dans une base de données. Pour cela, nous écrivons un premier code qui va transférer les données du fichier texte dans une base de données.

Le fichier texte impots.txt est le suivant:

 
Cacher/Afficher le codeSélectionnez

La base de données à construire est la suivante :

Image non disponible

La base s'appelle [dbimpots] et a une unique table [impots]. Elle est exploitée par l'utilisateur [root] sans mot de passe.

IX-A. Transfert d'un fichier texte dans une table MySQL (txt2mysql)

 
Cacher/Afficher le codeSélectionnez

Les résultats écran :

 
Cacher/Afficher le codeSélectionnez

IX-B. Le programme de calcul de l'impôt (impots_04)

Cette version utilise une classe Impôts qui va chercher dans une base de données les valeurs nécessaires au calcul de l'impôt. Nous introduisons ici une nouvelle notion, celle de requête préparée. L'exécution d'un ordre SQL par un Sgbd est faite en deux temps :

  • la requête est préparée : le Sgbd va préparer un plan d'exécution optimisé pour la requête. Il s'agit de l'exécuter le plus efficacement possible.
  • la requête est exécutée.

Si une même requête est exécutée N fois, les deux étapes précédentes sont faites N fois. Il est cependant possible de préparer la requête 1 fois et de l'exécuter N fois. Pour cela il faut utiliser des requêtes préparées. Si $requête est l'ordre SQL à exécuter et $connexion l'objet PDO représentant la connexion :

$statement=$connexion->prepare($requête) prépare une requête et rend la requête "préparée"

$statement->execute() exécute la requête préparée.

Si la requête préparée est un ordre select alors

$statement->fetchAll() ramène toutes les lignes de la table résultat du select sous la forme d'un tableau T où T[i,j] est la valeur de la colonne j de la ligne i de la table

$statement->fetch() ramène la ligne courante de la table sous la forme d'un tbaleau T où T[j] est la valeur de la colonne j de la ligne

La requête préparée apporte d'autres avantages que celui d'une meilleure efficacité. Elle amène notamment plus de sécurité. Aussi devrait-on l'utiliser systématiquement.

 
Cacher/Afficher le codeSélectionnez

Résultats : les mêmes qu'avec les versions précédentes.

Commentaires

Les nouveautés sont lignes 98-109 :

  • ligne 99 : l'ordre SQL select qui va permettre de récupérer les données nécessaires au calcul de l'impôt.
  • ligne 102 : préparation de l'ordre SQL select
  • ligne 103 : exécution de l'ordre préparé
  • lignes 105-109 : exploitation ligne par ligne de la table résultat du select

précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Serge Tahé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.