TUTO PHP/MySQL
Transcription
TUTO PHP/MySQL
Développement Web Php/MySQL TUTO PHP/MySQL Accès à une base MySQL Ce tutoriel vous indique comment, à l’aide PHP, exécuter une requête et parcourir un jeu d’enregistrements d’une base de données MySQL1. Connexion à une base Pour illustrer les concepts, nous considérerons l’environnement suivant : - Une base de données nommée « mabase » est créée sous MySQL (script de création donné en annexe 1) Cette base contient une table nommée « Produit » dont voici la représentation en intention : Produit (RefProduit, DesignProduit, PrixProduit) - Il n’y a pas d’utilisateur particulier enregistré sous phpMyAdmin. Il est recommandé, par sécurité d’attribuer un mot de passe à l’utilisateur root et de créer des utilisateurs pour chaque base de données (non abordé ici) Explications Code de connexion <?php $bdHote = 'localhost'; $bdNom = 'mabase'; $bdUtilisateur = 'root'; Définition connexion. des paramètres de $bdMotDePasse = ''; $bdConnexion=@mysql_connect($bdHote,$bdUtilisateur,$bdMotD Connexion au serveur MySQL. ePasse) or die ("Erreur de connexion à $bdHote pour l'utilisateur $bdUtilisateur"); mysql_select_db($bdNom, $bdConnexion) or die ("Erreur de sélection de la base $bdNom"); Sélection de la base de données. ?> Avant de poursuivre, enregistrez le code ci-dessous dans un fichier PHP et lancer le de manière à vérifier que la connexion et la sélection de la base se font sans problèmes : La page ne doit rien afficher. Notes : - Le caractère « @ » est utilisé pour éviter l’affichage des messages d’erreurs. La fonction die() termine l’exécution du script et affiche le message passé en paramètre. Explications : Lors de l’initialisation de la connexion, si la fonction mysql_connect() retourne Faux (échec de connexion), l’expression logique est évaluée .. or die()… ce qui a pour effet de terminer le script par l’affichage du message d’erreur. Si la connexion aboutie, l’expression logique n’est pas entièrement évaluée (cf. table de vérité de l’opérateur « Ou ») et la fonction die() n’est pas exécutée. 1 A noter que depuis PHP5 il est recommandé d’utiliser l’interface d’accès aux données PDO (PHP Data Objects). Il est prévu que ce mode d’accès soit celui proposé par défaut avec PHP6. N.D sept.-11 /TUTO PHP-MySQL v3.0.docx/ Page 1 sur 4 Développement Web Php/MySQL TUTO PHP/MySQL Accès à une base MySQL Exécution d’une requête ATTENTION : Les extraits de code présentés ici doivent être rajoutés au fichier qui contient les instructions de connexion à la base de données. L’ensemble du code est donnée en annexe 2. Première requête : On désire appliquer une augmentation de 10 € à tous les produits. Explications Code PHP $requete = 'Update Produit Set PrixProduit=PrixProduit+10'; Définition de la requête. mysql_query($requete); Exécution de la requête sur connexion actuellement active. la Deuxième requête : On désire afficher les informations concernant le produit dont la référence est "CH004" Explications Code PHP Définition de la requête. $requete = "Select * From Produit " . "Where RefProduit = 'CH004'; Le résultat de l’exécution de la requête est un jeu d’enregistrements affecté à la variable $tableRequete. $tableRequete = mysql_query($requete); $ligneRequete = mysql_fetch_assoc($tableRequete); echo 'Informations relatives au produit CH004 :<br/>' ; echo 'Désignation : ' . $ligneRequete['DesignProduit'] ; echo '<br/>Prix : ' . $ligneRequete['PrixProduit'] ; Le premier enregistrement est lu et son contenu est affecté à la variable $ligneRequete. L’accès aux champs de la ligne se fait en indiquant le nom du champ entre 2 crochets. Notes : - La lecture d’un enregistrement peut également être réalisée avec les fonctions suivantes : mysql_fetch_row(), msql_fetch_object() - L’accès au champ DesignProduit se fera (dans l’ordre) en utilisant les variables suivantes : $ligneProduit[1], $ligneRequete->DesignProduit - La fonction mysql_fetch_array() combine mysql_fetch_row() et mysql_fetch_assoc(). N.D sept.-11 par /TUTO PHP-MySQL v3.0.docx/ défaut, les résultats obtenus avec Page 2 sur 4 Développement Web Php/MySQL TUTO PHP/MySQL Accès à une base MySQL Parcours d’un jeu d’enregistrement Notre objectif est d’afficher le contenu de la table des produits dans un tableau de manière à obtenir le résultat suivant (extraits) : … Explications Code PHP $requete Création du jeu d’enregistrement. = 'Select * From Produit'; $tableRequete = mysql_query($requete); echo "<table width='80%' border='1' cellpadding='0'>"; echo "<tr><th>RefProduit</th><th>DesignProduit</th>"; Déclaration l’entête. du tableau et affichage de echo "<th>PrixProduit</th></tr>"; while($ligneRequete=mysql_fetch_assoc($tableRequete)) Parcours total du jeu d’enregistrements. { echo "<tr><td>" . $ligneRequete['RefProduit'] . "</td>"; echo "<td>" . $ligneRequete['DesignProduit'] . "</td>"; echo "<td>" . $ligneRequete['PrixProduit'] . "</td></tr>"; } echo "</table>"; Affichage d’une ligne du d’enregistrements dans le tableau. jeu Fermeture de la balise du tableau. Explications : - La condition d’arrêt du « TantQue » : ($ligneRequete=mysql_fetch_assoc($tableRequete)) est à interpréter comme suit : Tant que « L’affectation du résultat de la lecture du jeu d’enregistrements $tableRequete à la variable $ligneRequete est possible (retourne vrai) » - Si la fonction mysql_fetch_assoc() retourne une erreur (ex. : fin du jeu d’enregistrements) ce résultat ne pourra pas être utilisé pour initialiser la variable $ligneRequete. L’affectation retournera donc Faux. Dans le cas contraire, le résultat de la lecture pourra être affecté à la variable $ligneRequete. L’affectation retournera donc Vrai. - Le passage à l’enregistrement suivant est automatiquement réalisé lors de chaque appel de la fonction mysql_fetch_assoc(). N.D sept.-11 /TUTO PHP-MySQL v3.0.docx/ Page 3 sur 4 Développement Web Php/MySQL TUTO PHP/MySQL Accès à une base MySQL Annexe 1 : Script de création de la base CREATE DATABASE mabase ; CREATE TABLE Produit ( RefProduit varchar(5) NOT NULL, DesignProduit varchar(50) DEFAULT NULL, PrixProduit float DEFAULT NULL, PRIMARY KEY (RefProduit) ); INSERT INTO Produit (RefProduit, DesignProduit, PrixProduit) VALUES ('CH001', 'Lit 160 x 200 cm', 930), ('CH002', 'Commode L110 H76 P55 cm', 509), ('CH003', 'Armoire L100 H170 P85 cm', 700), ('CH004', 'Méridienne en teck', 139), ('CH005', 'Lit 140x 190 cm', 229), ('CH006', 'Lit rotin 140 x 190 cm', 410), ('CH007', 'Chevet L75 x H40 x P40 cm', 209); Annexe 2 : Script PHP complet <?php // Connexion à $bdHote $bdNom $bdUtilisateur $bdMotDePasse la base = 'localhost'; = 'mabase'; = 'root'; = ''; $bdConnexion = @mysql_connect($bdHote,$bdUtilisateur,$bdMotDePasse) or die ("Erreur de connexion à $bdHote pour l'utilisateur $bdUtilisateur"); mysql_select_db($bdNom, $bdConnexion) or die ("Erreur de sélection de la base $bdNom"); // Exemple n°1 $requete = 'Update Produit Set PrixProduit=PrixProduit-10'; mysql_query($requete); $requete = "Select * From Produit " . "Where RefProduit = 'CH004'"; // Exemple n°2 $tableRequete = mysql_query($requete); $ligneRequete = mysql_fetch_assoc($tableRequete); echo 'Informations relatives au produit CH004 :<br/>' ; echo 'Désignation : ' . $ligneRequete['DesignProduit'] ; echo '<br/>Prix : ' . $ligneRequete['PrixProduit'] ; // Exemple n°3 $requete = 'Select * From Produit'; $tableRequete = mysql_query($requete); echo "<table width='80%' border='1' cellpadding='0'>"; echo '<tr><th>RefProduit</th><th>DesignProduit</th>'; echo '<th>PrixProduit</th></tr>'; while($ligneRequete = mysql_fetch_assoc($tableRequete)) { echo '<tr><td>' . $ligneRequete['RefProduit'] . '</td>'; echo '<td>' . $ligneRequete['DesignProduit'] . '</td>'; echo '<td>' . $ligneRequete['PrixProduit'] . '</td></tr>'; } echo '</table>'; ?> N.D sept.-11 /TUTO PHP-MySQL v3.0.docx/ Page 4 sur 4