Base de données MySQL
Présentation
1. Introduction
Une base de données est un ensemble structuré de données géré par ordinateur. Dès que vous voulez enregistrer une information dans votre site web comme le nom ou le prénom ou pour créer un blog, vous êtes obligé d’utiliser une base de données. En théorie, vous pourriez utiliser un fichier texte mais en pratique ce n’est pas possible car il y aurait beaucoup de problèmes, par exemple si plusieurs personnes cherchent à écrire en même temps.
Il existe plusieurs logiciels de bases de données comme Oracle ou SQL Server, mais ils sont payants et n’ont une réelle utilité que dans le cas de gestion d’un gros volume de données. Vous allez voir dans ce support la base de données MySQL qui est gratuite et déjà intégrée dans Wamp. MySQL peut être installé sur un autre serveur que celui du serveur web mais en pratique il est souvent installé au même endroit.
Une base de données permet de stocker les données et de les classer, ce qui permet de les retrouver rapidement grâce au langage SQL (Structured Query Language). Le langage SQL est un langage permettant d’exécuter toutes les actions possibles dans la base de données comme créer des tables, ajouter des données, supprimer...
phpMyAdmin
phpMyAdmin est une interface web incluse dans Wamp permettant de gérer vos bases de données. Cette interface possède différents menus pour créer des bases de données, des tables, des champs, ajouter des données, les supprimer… Ainsi vous pouvez gérer votre base de données sans taper de commandes SQL.
Vous arrivez alors sur une interface web dont l’URL est : http://localhost/phpmyadmin5.2.1/
Vous allez maintenant apprendre à créer une base de données et à utiliser tous les outils de phpMyAdmin.
Cliquez sur l’onglet Bases de données.
Entrez le nom de la base de données que vous voulez créer dans la zone de saisie et laissez l’interclassement (langue utilisée) par défaut. Cliquez sur le bouton Créer.
Votre base de données apparaît sur la gauche. Dans cet exemple, la base de données est nommée bdd.
Ne mettez jamais de caractères spéciaux dans les noms de base, de table, de champ et de n’importe quel objet en base de données. Cela vous évitera de nombreux problèmes.
Cliquez sur bdd.
Maintenant, il faut créer une table en indiquant le nombre de champs qu’elle contient. C’est une valeur indicative car tout est modifiable par la suite.
Tapez "Personne" dans la zone de saisie à droite du nom et le chiffre 4 dans la zone de saisie du nombre de champs. En effet, la table Personne contiendra quatre champs : Id_personne (Int), Nom (Varchar 20), Prenom (Varchar 20) et Age (Int).
Cliquez sur le bouton...
Le langage SQL
1. Présentation
Dans ce support, il ne sera pas montré comment installer le serveur MySQL. Vous utiliserez phpMyAdmin et en particulier l’onglet SQL pour exécuter les différentes requêtes.
Il est conseillé de ne pas mettre de caractères spéciaux dans les noms de bases de données, de tables ou de champs. Vous devez essayer d’utiliser uniquement des caractères non accentués, des chiffres et le symbole _. Si vous ajoutez des espaces dans vos noms, vous êtes obligés de délimiter vos noms par des guillemets ou des apostrophes.
Vous avez vu dans la présentation de phpMyAdmin qu’une base contient des tables qui contiennent des champs. La syntaxe pour référencer un champ dans la requête est donc :
nom_base.nom_table.nom_champ
Quand vous exécutez une requête SQL par l’onglet SQL de phpMyAdmin, il est important de savoir à quel endroit vous vous situez par rapport à votre base de données. Si vous avez déjà sélectionné votre base de données, vous voyez le nom du serveur et le nom de votre base de données affichés en haut de la page phpMyAdmin :
Dans ce cas, il n’est pas nécessaire de rappeler le nom de votre base de données dans la requête puisque vous êtes déjà dedans.
Par exemple, il suffit d’écrire :
SELECT * FROM Personne
et non pas :
SELECT * FROM bdd.Personne
Dans la suite de ce chapitre, la base de données bdd contenant la table Personne avec les champs Id_personne, Nom, Prenom et Age est utilisée.
2. Lire des données
L’instruction qui permet de lire dans une table est SELECT.
Par exemple :
SELECT * FROM Personne
-
SELECT : sélectionne ou lit.
-
* : tous les champs.
-
FROM : de ou dans.
-
Personne : nom de la table.
Cette requête signifie donc : lire tous les champs de la table Personne.
Sélectionnez la table Personne puis copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
Pour afficher seulement certains champs, il suffit de les nommer en les séparant par des virgules.
Par exemple :
SELECT Nom,Prenom FROM Personne
Affiche :
3. Écrire des données
L’instruction qui permet d’écrire dans une table est INSERT...
SQL avancé
1. Les fonctions et instructions SQL
L’objectif de cette section n’est pas de vous apprendre toutes les fonctions SQL mais simplement celles qui sont les plus utilisées.
Dans la suite de cette section, la table Personne contient ces données :
a. Limiter des données
L’instruction qui permet de limiter le nombre de lignes retournées par un SELECT est LIMIT nombre_lignes.
Par exemple :
SELECT * FROM Personne ORDER BY Nom LIMIT 4
Cette requête signifie donc : lire les trois premières lignes contenant tous les champs de la table Personne triées par Nom.
Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
Il est possible aussi d’ajouter à partir de quel numéro de ligne vous souhaitez récupérer les données en ajoutant ce numéro avant le nombre de lignes.
Par exemple, pour récupérer les lignes de la cinquième à la sixième incluse :
SELECT * FROM Personne ORDER BY Nom LIMIT 4,2
Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
b. Valeurs distinctes
L’instruction qui permet de prendre uniquement les valeurs des lignes distinctes retournées par un SELECT est DISTINCT.
Par exemple :
SELECT DISTINCT Nom FROM Personne ORDER BY Nom
Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
En réalité deux personnes s’appellent DUPUIS mais ce nom n’apparaît qu’une fois grâce au mot-clé DISTINCT.
c. Convertir en majuscules
L’instruction qui permet de convertir la valeur d’un champ en majuscules est UPPER(nom_du_champ).
Par exemple, pour afficher le prénom en majuscules :
SELECT Nom, UPPER(Prenom) FROM Personne ORDER BY Nom
Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
Vous pouvez créer un alias pour UPPER(Nom) de cette façon :
SELECT Nom, UPPER(Prenom) as Prenom_majuscule FROM Personne ORDER BY Nom
Copiez cette requête dans l’onglet SQL de phpMyAdmin et cliquez sur le bouton Exécuter :
d. Convertir en minuscules
L’instruction qui permet de convertir la valeur d’un champ en minuscules est LOWER(nom_du_champ).
Par exemple, pour afficher...
Exercices SQL
Pour effectuer ces exercices, il faut que la table Personne et la table Langue soient créées dans la base de données bdd. Ces tables ont les données suivantes :
Table Personne :
Table Langue :
Voici le script SQL permettant de créer les tables avec leurs données :
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-- Base de données: `bdd`
-- --------------------------------------------------------
-- Structure de la table `langue`
DROP TABLE IF EXISTS Langue;
CREATE TABLE IF NOT EXISTS Langue (
Id int(11) NOT NULL AUTO_INCREMENT,
Libelle varchar(20) NOT NULL,
PRIMARY KEY (Id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
-- Contenu de la table `langue`
INSERT INTO Langue (Id, Libelle) VALUES
(1, 'Français'),
(2, 'Anglais'),
(3, 'Allemand'),
(4, 'Russe');
-- --------------------------------------------------------
-- Structure de la table `personne`
DROP TABLE IF EXISTS Personne;
CREATE TABLE IF NOT EXISTS Personne (
Id_personne int(11) NOT NULL AUTO_INCREMENT,
Nom varchar(20) NOT NULL,
Prenom varchar(20) NOT NULL,
Age int(11)...
L’accès aux bases de données avec PHP
1. Introduction
Vous avez vu précédemment les différentes requêtes SQL et vous allez voir maintenant comment les exécuter dans PHP et afficher le résultat.
Ce chapitre vous permettra de lire, d’insérer, de modifier et de supprimer des données depuis des formulaires PHP.
Il faut en prérequis avoir la structure de la table Personne suivante :
Ainsi que ces données :
Il existe deux extensions par défaut pour utiliser les fonctions pour accéder à MySQL : mysql_ et mysqli_. Ces deux extensions sont très proches mais mysqli_ est plus récente (version 5 de PHP) et a quelques fonctionnalités supplémentaires. C’est donc mysqli_ qui sera utilisé dans la suite de ce document. Dans une prochaine section, l’extension PDO (PHP Data Object) sera présentée. C’est une extension encore plus récente et plus complète utilisant les objets.
2. Connexion
La fonction permettant de se connecter à MySQL est mysqli_connect().
Cette fonction prend en paramètres :
-
L’hôte : chaîne de caractères contenant le nom ou l’adresse IP de l’hôte. Celui-ci correspond à "localhost" ou 127.0.0.1 si vous travaillez en local.
-
L’utilisateur : chaîne de caractères contenant le nom de l’utilisateur pour se connecter à la base de données. Si vous travaillez en local, celui-ci correspond à "root". Attention, cet utilisateur a tous les droits sur votre base de données.
-
Le mot de passe : chaîne de caractères contenant le mot de passe associé à l’utilisateur. Celui-ci est vide par défaut.
-
Le nom de la base de données : chaîne de caractères optionnelle contenant le nom de votre base de données.
-
Le port : numéro du port optionnel pour se connecter au serveur MySQL. Celui-ci vaut 3306 par défaut.
Cette fonction retourne false en cas d’erreur ou un objet mysqli contenant l’identifiant de connexion en cas de succès.
Par exemple :
<?php
$connect = mysqli_connect("127.0.0.1", "root", "", "bdd");
?>
Autre exemple en gérant les erreurs :
<?php ...
PDO
Ce chapitre utilise quelques notions de POO. Le chapitre L’objet est donc un prérequis pour la bonne compréhension des syntaxes.
1. Introduction
PDO (PHP Data Object) est une bibliothèque de fonctions PHP permettant d’accéder à n’importe quelle base de données car elle apporte une couche d’abstraction à l’accès aux bases de données. C’est un langage orienté objet mais dont le fonctionnement n’est pas très différent de mysqli. Il faut toujours écrire la requête et l’exécuter.
Pour activer cette bibliothèque, il faut ouvrir le fichier php.ini accessible par le menu configuration, PHP. Ensuite, vérifiez qu’il n’y a pas de point-virgule devant la ligne :
Cette bibliothèque est écrite en langage objet donc la syntaxe peut être déroutante. Vous avez plus d’explications sur la programmation objet dans le chapitre L’objet.
Il faut en prérequis avoir créé la table Personne.
Ainsi que ces données :
Le chapitre sur phpMyAdmin explique comment créer la base avec les données.
2. Connexion
Pour se connecter à la base de données MySQL, il faut créer une instance de la classe PDO, c’est-à-dire créer un objet qui est un exemplaire de la classe PDO mais avec certains paramètres. Cette notion est abordée de façon plus précise dans le chapitre L’objet.
L’objet permettant de se connecter à MySQL est PDO().
Cet objet prend en paramètres :
-
La chaîne de connexion : chaîne de caractères contenant le SGBD utilisé et le nom ou l’adresse IP de l’hôte. Celui-ci correspond à "localhost" ou 127.0.0.1 si vous travaillez en local. Cette chaîne contient aussi le nom de la base de données.
-
L’utilisateur : chaîne de caractères contenant le nom de l’utilisateur pour se connecter à la base de données. Si vous travaillez en local, celui-ci correspond à "root". Attention, cet utilisateur a tous les droits sur votre base de données.
-
Le mot de passe : chaîne de caractères contenant le mot de passe associé à l’utilisateur. Celui-ci est vide par défaut.
Par exemple...
Exercices
1. Énoncés
Exercice 1 (facile) : Page de connexion
Créer une page login.php contenant une zone login et une zone password avec un bouton de type submit. Cette page appelle la page verif_login.php qui vérifie si le login et le mot de passe sont dans la base de données. Vous pouvez repartir de l’exercice 1 du chapitre Transmettre des données d’une page à l’autre et modifier la page verif_login.php pour afficher "login correct" dans le cas où la personne est présente en base de données et rediriger sur la page login.php dans le cas contraire. Il faut aussi créer une table login_password contenant l’Id, le login et le mot de passe.
Exercice 2 (moyen) : Formulaire d’inscription
Cet exercice nécessite quelques connaissances en JavaScript ou en HTML5.
Créez une page accueil.php permettant de s’inscrire à une formation.
Tous les champs sont obligatoires. Le lien affiche un pdf contenant les conditions générales et il est nécessaire d’avoir cliqué sur ce lien puis coché la case pour pouvoir envoyer le formulaire.
Créez ensuite une page connection.php effectuant la connexion à la base de données puis une page ajouter.php vérifiant si la personne n’est pas déjà enregistrée avec son e-mail et stockant les données du formulaire dans la base de données. Cette page doit aussi vérifier les erreurs et retourner un message dans la page accueil.php.
D’autres exercices liés aux bases de données sont proposés à la fin de ce support.
2. Corrigés
Solution de l’exercice 1
Dans cet exemple le login est Jean et le mot de passe est 1234.
-
Créez la base de données bdd.
-
Script SQL de création de la table login_password :
CREATE TABLE login_password (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
Login VARCHAR( 20 ) NOT NULL ,
Password VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM ;
-
login.php :
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Exercice login</title>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
</head> ...