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:
La base de données à construire est la suivante :
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)▲
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.
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