Accès aux bases de données en PHP
Applications web L1
Olivier Mallet
Université de Rouen
1 Généralités
2 SQL
3 Accès aux bases de données en PHP
Généralités
Les bases de données
Base de données : ensemble de données organisé et interrogeable
Un serveur de bases de données contient une ou plusieurs bases
Système de gestion de base de données (SGBD) : ensemble de
programmes qui permettent le stockage d’informations dans une base
de données et l’accès à ces informations
Exemples de SGBD : MySQL, PostgreSQL, Oracle, Access. . .
Modèle relationnel :
La base est vue comme un ensemble de tables contenant les données
Exemple (Table contenant des informations sur des étudiants)
Numéro Nom Prénom Filière
237348 Croque Odile L1 IEEEA
237349 Bistrucla César L2 Maths
237383 Hochon Paul L3 Info
Accès grâce au langage SQL (Structured Query Language)
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 3 / 23
Généralités
Exemple : le serveur MySQL du département
d’informatique
inf-mysql.univ-rouen.fr
duponjea martipie lefebjac
Produits
Etudiants Personnes
Clients
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 4 / 23
SQL
Le langage SQL
Permet de :
créer des tables, modifier leur structure, les supprimer
insérer, mettre à jour et supprimer des données (lignes des tables)
interroger la base de données
définir les droits d’accès aux données
Principaux types de données : entier, nombre décimal, chaîne de
caractères, date (au format AAAA-MM-JJ)
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 5 / 23
SQL
Remarques sur la syntaxe de SQL
Chaînes de caractères encadrées par ’’
Une instruction SQL se termine par un point-virgule
Commentaires introduits par --
Les noms des tables et des colonnes sont sensibles à la casse (mais
pas les mots-clés)
Pas d’accent ni d’espace dans les noms des tables et des colonnes
Les sauts de ligne ne sont pas significatifs
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 6 / 23
SQL
Où utilise-t-on ce langage ?
On peut taper des requêtes SQL :
dans un programme en ligne de commande (ex : client MySQL)
dans un programme avec une interface graphique (ex : MySQL
Workbench, PHPMyAdmin)
On peut aussi inclure des requêtes SQL dans un programme (en C,
Java, PHP. . . ) qui sera chargé de les envoyer au serveur et utilisera
ensuite la réponse éventuelle de celui-ci
−→ C’est ce que nous allons apprendre à faire avec PHP
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 7 / 23
SQL
Table utilisée pour les exemples
Table nommée Etudiants avec 6 attributs (colonnes) :
prenom (chaîne de caractères)
nom (chaîne de caractères)
ddn : date de naissance (date)
ville : ville où habite l’étudiant (chaîne de caractères)
filiere (chaîne de caractères)
note (nombre décimal)
Exemple (À quoi peut ressembler le contenu de cette table)
prenom nom ddn ville filiere note
Pauline Tran 1995-03-14 Rouen L1IEEEA 13.00
Gérard Menvussa 1993-12-13 Dieppe L2Info 8.00
Léo Pard 1994-05-10 Elbeuf L2Maths 11.00
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 8 / 23
SQL
Insertion de données dans une table
Insertion d’une ligne :
Exemple
INSERT INTO Etudiants
VALUES(’Alain’, ’Proviste’, ’1989-01-17’, ’Rouen’, ’L1IEEEA’, 10);
Insertion de plusieurs lignes à la fois :
Exemple
INSERT INTO Etudiants
VALUES(’Alain’, ’Proviste’, ’1989-01-17’, ’Rouen’, ’L1IEEEA’, 10),
(’Line’, ’Yorance’, ’1989-03-20’, ’Dieppe’, ’L2Info’, 12);
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 9 / 23
SQL
Mise à jour des données
Exemple (Un étudiant a déménagé à Sotteville)
UPDATE Etudiants -- table modifiée
SET ville = ’Sotteville’ -- changements effectués
WHERE prenom = ’Alain’ AND nom = ’Proviste’; -- lignes affectées
Exemple (On remonte de 10% les notes de toute la filière IEEEA ©)
UPDATE Etudiants
SET note = note * 1.1
WHERE filiere = ’L1IEEEA’;
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 10 / 23
SQL
Suppression de données
Suppression des lignes vérifiant une condition :
Exemple (Suppression des étudiants nés avant 1995)
DELETE FROM Etudiants -- table concernée
WHERE ddn < ’1995-01-01’; -- condition
Suppression de toutes les lignes d’une table (ne supprime pas la table
elle-même) :
Exemple
DELETE FROM Etudiants;
Attention !
Il est impossible de récupérer les données supprimées !
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 11 / 23
SQL
Lecture de données
Lecture de tout le contenu de la table :
Exemple
SELECT * FROM Etudiants;
Lecture des données d’une ou plusieurs colonnes :
Exemple (Nom et prénom de tous les étudiants)
SELECT nom, prenom FROM Etudiants ;
Exemple
SELECT ville FROM Etudiants; -- une ville pourra apparaître plusieurs fois
SELECT DISTINCT ville FROM Etudiants; -- pas de doublons dans ce cas
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 12 / 23
SQL
Utilisation d’une clause restrictive
On ne veut récupérer que certaines lignes ⇒ clause WHERE
Exemple (Tout sur les étudiants qui habitent à Rouen)
SELECT * FROM Etudiants WHERE ville = ’Rouen’;
Exemple (Prénom et nom des étudiants de L1 IEEEA)
SELECT prenom, nom FROM Etudiants WHERE filiere = ’L1IEEEA’;
Exemple (Prénom et nom des étudiants habitant Rouen ou Dieppe)
SELECT prenom, nom
FROM Etudiants
WHERE ville = ’Rouen’ OR ville = ’Dieppe’;
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 13 / 23
SQL
Opérateurs intervenant dans la clause WHERE
Opérateurs de comparaison : =, <>, <, <=, >, >=
Exemple (Prénoms des étudiants ayant au moins 12 de moyenne)
SELECT prenom FROM Etudiants WHERE note >= 12;
LIKE : s’utilise avec % qui signifie « n’importe quelle suite de
caractères »
col LIKE ’truc%’ : la valeur de la colonne col commence par « truc »
col LIKE ’%truc’ : la valeur de la colonne col finit par « truc »
col LIKE ’%truc%’ : la valeur de la colonne col contient « truc »
Exemple (Notes des étudiants habitant dans une ville dont le nom
commence par « Ro »)
SELECT note FROM Etudiants WHERE ville LIKE ’Ro%’;
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 14 / 23
SQL
Opérateurs intervenant dans la clause WHERE (2)
IN : appartenance à un ensemble de valeurs
Exemple
SELECT prenom, nom
FROM Etudiants
WHERE ville IN (’Rouen’, ’Dieppe’);
est équivalent à
SELECT prenom, nom
FROM Etudiants
WHERE ville = ’Rouen’ OR ville = ’Dieppe’;
Opérateurs logiques : AND , OR , NOT
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 15 / 23
SQL
L’opérateur NOT : exemples
Exemple (Affichage des étudiants qui ne sont ni en L1 IEEEA ni en
L2 Info)
SELECT *
FROM Etudiants
WHERE NOT(filiere = ’L1IEEEA’ OR filiere = ’L2Info’);
ou
SELECT *
FROM Etudiants
WHERE filiere NOT IN (’L1IEEEA’, ’L2Info’);
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 16 / 23
Accès aux bases de données en PHP
Lien entre SQL et PHP
Requête HTTP Requête SQL
Exécution du
code PHP
HTML + CSS Réponse
client serveur serveur de
PHP bases de
données
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 17 / 23
Accès aux bases de données en PHP
Les fonctions PHP utiles
Fonctions différentes selon le SGBD utilisé (ici, on traite le cas de
MySQL)
Connexion au serveur et choix d’une base de données :
mysqli_connect($serveur, $login, $mdp, $base)
→ on stocke le résultat dans une variable ($connexion dans les
exemples)
Exécution d’une requête : mysqli_query($connexion, $requete)
→ on stocke le résultat (pour les requêtes SELECT) dans une
variable ($res dans les exemples)
Récupération d’une ligne du résultat dans un tableau :
mysqli_fetch_array($res)
Nombre de lignes renvoyées : mysqli_num_rows($res)
Fermeture de la connexion : mysqli_close($connexion)
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 18 / 23
Accès aux bases de données en PHP
Exemple d’accès à une base de données MySQL en PHP
On dispose d’une table Etudiants dans la base mabase située sur le
serveur inf-mysql.univ-rouen.fr
On veut afficher dans un tableau HTML le nom, le prénom et la note
des étudiants dont la note est ≥ 10
<table>
<tr> <!– Titres des colonnes -->
<th>Nom</th>
<th>Prénom</th>
<th>Note</th>
</tr>
<?php
// Connexion et choix de la base de données
$connexion = mysqli_connect("inf-mysql.univ-rouen.fr", "duponjea", "123456",
"mabase");
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 19 / 23
Accès aux bases de données en PHP
Exemple d’accès à une base de données MySQL (suite)
// Exécution d’une requête
$requete = "SELECT * FROM Etudiants WHERE note >= 10";
$res = mysqli_query($connexion, $requete);
// Récupération et affichage des résultats ligne par ligne
while ($etu = mysqli_fetch_array($res)) {
echo "<tr><td>{$etu[’nom’]}</td><td>{$etu[’prenom’]}</td>";
echo "<td>{$etu[’note’]}</td></tr>";
}
// Fermeture de la connexion
mysqli_close($connexion);
?>
</table>
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 20 / 23
Accès aux bases de données en PHP
Autre exemple : ajout d’un étudiant
Formulaire d’ajout d’un étudiant dans la base :
<form method="post" action="ajout_etudiant.php">
<p>
Prénom : <input type="text" name="prenom" /> <br />
Nom : <input type="text" name="nom" /> <br />
Date de naissance : <input type="text" name="ddn" /> <br />
Ville : <input type="text" name="ville" /> <br />
Filière : <input type="text" name="filiere" /> <br />
Note : <input type="text" name="note" /> <br />
</p>
<p>
<input type="submit" value="Envoyer" />
</p>
</form>
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 21 / 23
Accès aux bases de données en PHP
Suite de l’exemple : page de traitement PHP
// Connexion à la base
$connexion = mysqli_connect("inf-mysql.univ-rouen.fr", "duponjea", "123456",
"mabase");
$prenom = $_POST["prenom"];
$nom = $_POST["nom"];
$ddn = $_POST["ddn"];
$ville = $_POST["ville"];
$filiere = $_POST["filiere"];
$note = $_POST["note"];
$requete = "INSERT INTO Etudiants VALUES(’$prenom’,’$nom’,’$ddn’,
’$ville’,’$filiere’,$note)";
mysqli_query($connexion, $requete);
// Fermeture de la connexion
mysqli_close($connexion);
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 22 / 23
Accès aux bases de données en PHP
Afficher les erreurs SQL en PHP
Renvoyer un message en cas d’erreur de connexion :
mysqli_connect_error()
Renvoyer un message en cas d’erreur suite à l’appel d’une autre
fonction mysqli : mysqli_error($connexion) où $connexion est
la valeur renvoyée par mysqli_connect
Exemple
$connexion = mysqli_connect("inf-mysql.univ-rouen.fr", "duponjea", "123456",
"mabase");
echo mysqli_connect_error(); // affichera un message si la connexion a échoué
$requete = "SELECT * FROM Etudiants WHERE note >= 10";
$res = mysqli_query($connexion, $requete);
echo mysqli_error($connexion); // affichera un message si la requête a échoué
Olivier Mallet (Université de Rouen) Accès aux bases de données en PHP 23 / 23