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