Base de Donnees PHP
Base de Donnees PHP
Base de Donnees PHP
- Une base de données est gérée par un Système de Gestion de Base de Données (SGBD) qui
est une sorte de logiciel moteur permettant l’accès et la manipulation des bases de données.
Exemples de SGBDs les plus connus : MySQL, SQlite, Oracle …
- Pour pouvoir communiquer avec une base de données via un SGBD, on doit utiliser le
langage SQL (Structured Query Language). C’est un langage informatique très utilisé par les
développeurs web pour communiquer avec les données d’un site web.
- Pour optimiser la flexibilité d’une base de données, les données doivent être organisées sous
forme de tables afin qu’il n’y ait pas de redondance. Une base de données est constituée
d’au moins une table. Une table de base de données est comparable à une feuille de calcul,
dans la mesure où les données sont stockées dans des lignes et des colonnes. Chaque ligne
d'une table est appelée enregistrement. Les enregistrements permettent de stocker les
éléments d’information individuels. Chaque enregistrement est constitué d’un ou plusieurs
champs. Les champs correspondent aux colonnes d’une table. Un des champs de la table est
désigné comme clé primaire. Une clé primaire est la donnée qui permet d'identifier de
manière unique un enregistrement dans une table. Une clé primaire peut être composée
d'une ou de plusieurs colonnes de la table.
Exemple :
Supposons qu’on a une base de données relative à un site de commerce en ligne nommée
« magasin ». Cette base contient des données sur les clients, les articles à vendre, et les
commandes passées. Ainsi, pour une meilleure organisation, ces données seront stockées
dans 3 tables différentes :
la première table nommée par exemple « Clients » : elle contiendra toutes les
infos nécessaires sur chaque client du site tq : son nom, son prénom, son adresse
postale, son adresse mail, son identifiant … (nom, prénom, adresse, …)
constituent les colonnes (les champs) de la table, tandis que, chaque ligne dans la
table correspond à un client différent du site comme l’illustre la figure suivante :
- Les champs (les colonnes d’une table) peuvent être de types différents (nombres, chaines de
caractères, dates, …). Il est possible d’utiliser lors de la définition des différents champs
(attributs) d’une table donnée certaines options telles que :
- Les données provenant des utilisateurs d’un site web donné sont stockées côté serveur
temporairement dans des variables (tq $_POST, $_GET, $_SESSION, …) qui sont détruites
automatiquement dès que la page web générée est quittée. Ainsi, pour pouvoir réutiliser ces
données lors d’une prochaine consultation de la page web, il faut les sauvegarder (côté
serveur bien sûr) soit dans des fichiers (déjà abordé dans une partie précédente de ce cours),
soit dans des bases de données (l’objet de cette partie du cours).
- Lorsque la quantité des données à stocker est grande, l’utilisation des fichiers devient très
compliquée. Par conséquent, il devient plus judicieux d’utiliser dans ce cas les bases de
données.
- Nous nous intéressons dans ce cours aux bases de données MySQL (i.e. les bases de données
gérées par le SGBD MYSQL).
- L’accès à une base de données MySQL et son utilisation, qu’il s’agisse d’insérer, de modifier,
de lire ou de supprimer des données, suit les étapes suivantes :
1- Connexion au serveur MySQL ;
2- Envoi de diverses requêtes SQL au serveur (insertion, lecture, suppression ou mise à
jour des données) ;
3- Récupération du résultat retourné par le serveur MySQL suite à chaque requête
SQL.
- Pour se connecter à une base de données MySQL, PHP propose plusieurs moyens à savoir :
L'extension mysql_ : ce sont des fonctions qui permettent d'accéder à une base
de données MySQL et donc de communiquer avec MySQL. Cepandant, ces
fonctions sont devenues obsolètes et il n’est plus recommandé de les utiliser
aujourd'hui.
L'extension mysqli_ : ce sont des fonctions améliorées d'accès à MySQL. Elles
proposent plus de fonctionnalités et sont plus à jour.
L'extension PDO : il s’agit d’un outil complet qui permet d'accéder à n'importe
quel type de base de données. On peut donc l'utiliser pour se connecter aussi
bien à une base de données MySQL que PostgreSQL ou Oracle. Vu sa généricité,
nous allons utiliser dans le cadre de ce cours cet outil (l’outil PDO) pour se
connecter aux différentes bases de données MySQL créées.
- Le script PHP permettant de se connecter à une base de données MySQL est le suivant :
<?php
try
{
$db = new PDO('mysql:host=nom_serveur;dbname=nom_bd;charset=utf8',
'login', 'password');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
?>
- Ce code crée un objet $db qui représente la connexion à la base de données ici de type
MySQL, c’est pourquoi on a mis : PDO('mysql:…’). La connexion est créée en indiquant dans
l'ordre dans les paramètres :
le nom d'hôte : host=nom_serveur;
la base de données à laquelle on désire se connecter : dbname=nom_bd;
le type d’encodage à adopter pour les données de la base : charset=utf8 ;
le login ;
le mot de passe ;
- Sous WAMP, normalement, le login est ‘root’ et il n'y a pas de mot de passe, on met donc
une chaîne vide. En outre,
- Lorsque vous travaillez en local (sur votre machine), le paramètre nom de l’hôte doit avoir
comme valeur localhost. Toutefois, dès que votre site sera en ligne, vous aurez sûrement un
nom d'hôte différent ainsi qu'un login et un mot de passe différents de ‘root’ et ‘ ’,
respectivement.
- On commence par exécuter les instructions à l'intérieur du bloc try. Si tout se passe bien (i.e.
les valeurs passées aux différents paramètres sont correctes), une connexion avec la base de
données indiquée est ouverte et PDO renvoie l’objet $db qui servira par la suite pour faire
passer des requêtes SQL à la base.
- S'il y a une erreur, PDO renvoie une exception qui permet de capturer l'erreur et on passe
directement à l’exécution des instructions du bloc catch. Généralement, à ce niveau, on
affiche un message décrivant l'erreur et on arrête l'exécution de la page en utilisant la
fonction Die.
- Pour lire des données à partir d’une base de données MySQL, on doit exécuter la requête
SQL « SELECT ».
- Considérons à nouveau l’exemple de la base de données « magasin » décrit précédemment.
Le script PHP permettant de lire les données contenues dans la table « Clients » de la base
« magasin » est le suivant :
<?php
try
{
// connexion à la base de données magasin
$bdd = new PDO('mysql:host=localhost;dbname=magasin;charset=utf8', 'root', '');
}
catch(Exception $e)
{
// En cas d'erreur, on affiche un message et on quitte la page
die('Erreur : '.$e->getMessage());
}
// Si on passe à l’exécution des instructions suivantes c’est que tout s’est bien passé lors de la
connexion à la base
// En utilisant une boucle, on affiche chaque entrée (ligne) lue dans le résultat retourné
$i=0 ;
while ($entree = $reponse->fetch())
{
$i++ ;
echo ‘’Client num ‘’.$i.’’ est ‘’.$entree['Prenom'].’’ ‘’. $entree['Nom']. ‘’ son adresse postale est
‘’. $ entree['adresse'].’’ Son adresse mail est ‘’. $entree[‘Mail'].’’<br/>’’;
}
?>
- $reponse contient toute la réponse de MySQL retournée sous forme d'objet.
- $entree est un tableau (array) renvoyé par la méthode fetch() qui permet de lire à chaque
appel l’entrée (la ligne) suivante dans la réponse $reponse retournée par le serveur et
d’organiser les champs dans l'array $entree.
Supposons que notre table « Clients » contient uniquement deux entrées (càd les infos sur
deux clients uniquement), alors la réponse renvoyée par le serveur MySQL est celle entourée
par le cadre en rouge dans la figure suivante :
Pour lire chaque ligne (entrée) dans la réponse retournée, on doit utiliser une boucle avec
comme condition d’arrêt la valeur retournée par la méthode fetch(). En effet, fetch() à
chaque appel récupère une nouvelle entrée (ligne = tableau) et place son contenu dans
$entree; fetch() renvoie la valeur FALSE dans $entree lorsque toutes les entrées (lignes) ont
été passées en revue ce provoque l’arrêt de la boucle (ici la boucle while).
- PHP nous offre également la possibilité de construire nos requêtes SQL en fonction de
variables remplies selon le choix de l’utilisateur (via un formulaire par exemple) comme le
montre le script suivant :
<?php
// on désire lire l’adresse postale du client dont le nom et le prénom sont choisis par
l’utilisateur et saisis dans deux champs texte simples d’un formulaire
- :nom et :prenom sont des marqueurs nominatifs (Notez qu’ils commencent par le symbole
deux-points : ) qui seront remplacés par les variables indiquées à l'aide d'un tableau (array)
associatif. On parle dans ce cas, de requête « préparée » d’où l’utilisation de la méthode
prepare() qui prépare la requête avant de l’exécuter en utilisant la méthode execute().
- Pour afficher des détails sur les erreurs encourues éventuellement lors de l’exécution d’une
requête SQL via PHP, il est incontournable d’activer les erreurs lors de la connexion à la base
de données avec l’outil PDO comme suit :
<?php
$db = new PDO('mysql:host=localhost;dbname=magasin;charset=utf8', 'root', '',
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
?>
- Pour ajouter une nouvelle entrée (ligne) à une table d’une base de données, il suffit d’utiliser
la requête SQL « INSERT » dont la syntaxe est la suivante :
- Maintenant, le code PHP permettant d’insérer une nouvelle entrée dans une table d’une
base de données à laquelle on s’est déjà connecté est le suivant :
<?php
// On ajoute une entrée dans la table « Clients »
$db->exec('INSERT INTO Clients (Nom, Prenom, adresse, Mail)
VALUES(\'Ben_foulen\', \'Foulen\', \'VILLE\', \'AdressMail\')');
- Notez ici l’utilisation de la méthode exec() pour l’insertion de nouvelles données au lieu de la
méthode query() utilisée précédemment pour la lecture des données.
- Il est nécessaire d'entourer toute valeur attribuée à un champ de type chaine de caractère
d'apostrophes comme l’apostrophe est un caractère spécial dans la requête il faut donc
l’échapper en le précédant d’un antislash (\').
<?php
$requete = $db->prepare('INSERT INTO Clients (Nom, Prenom, adresse, Mail)
VALUES(:nom, :prenom, :adresse, :mail)');
- Pour supprimer des données d’une base de données MySQL, il suffit d’utiliser la requête SQL
« DELETE » dont la syntaxe est la suivante :
- Maintenant, le code PHP permettant de supprimer une(des) entrée(s) depuis une table d’une
base de données à laquelle on s’est déjà connecté est le suivant :
<?php
// On supprime les entrées de la table « Clients » relatives aux clients dont le prenom
est FOULEN
$nb_supp=$db->exec('DELETE FROM Clients WHERE Prenom=\’FOULEN\’ ');
echo ‘'La suppression des données s’est effectuée avec succès !<br/> ’';
echo ‘’Nombre d’entrées supprimées est égale à : ‘’.$nb_supp ;
?>
- Encore une fois, notez ici l’utilisation de la méthode exec() pour la suppression de données et
non pas la méthode query() utilisée précédemment pour la lecture des données.
- L’exécution de la requête SQL permettant la suppression des données dans ce cas retourne
le nombre d’entrées (lignes) supprimées dans la table. En cas d’erreur, elle retourne FALSE.
- Pour supprimer des données variables en utilisant la méthode des requêtes préparées,
utilisez le code PHP suivant :
<?php
$requete = $db->prepare('DELETE FROM Clients WHERE Prenom= :prenom');
echo ‘'La suppression des données s’est effectuée avec succès ! ’';
?>
Modification de données dans une base de données MySQL
- Pour modifier des données dans une base de données MySQL, il suffit d’utiliser la requête
SQL « UPDATE » dont la syntaxe est la suivante :
- Maintenant, le code PHP permettant de mettre à jour une(des) entrée(s) dans une table
d’une base de données à laquelle on s’est déjà connecté est le suivant :
<?php
// On modifie l’adresse postale du client dont le prenom est FOULEN et le nom est
Ben_Foulen
$nb_modifs=$db->exec('UPDATE Clients SET adresse=\’nouvelle_adresse\’ WHERE
Prenom=\’FOULEN\’ AND Nom=\’Ben_Foulen\’ ');
echo ‘'La mise à jour de la table s’est effectuée avec succès !<br/> ’';
echo ‘’Nombre d’entrées modifiées est égale à : ‘’.$nb_modifs ;
?>
- Encore une fois, notez ici l’utilisation de la méthode exec() pour la mise à jour des données et
non pas la méthode query() utilisée précédemment pour la lecture des données.
- L’exécution de la requête SQL permettant la mise à jour des données dans ce cas retourne le
nombre d’entrées (lignes) modifiées dans la table. En cas d’erreur, elle retourne FALSE.
- Pour mettre à jour des données variables en utilisant la méthode des requêtes préparées,
utilisez le code PHP suivant :
<?php
$requete = $db->prepare('UPDATE Clients SET adresse= :adresse WHERE
Prenom= :prenom AND Nom= :nom ');
echo ‘'La mise à jour des données s’est effectuée avec succès ! ’';
?>