Pour cela, nous allons déjà devoir créer une base de données et des tables.
Dans cette leçon, je vous propose donc de voir comment créer une base de données et des tables avec PDO ou directement avec phpMyAdmin.
Création d’une base de données en utilisant PDO
Nous allons pouvoir créer une nouvelle base de données avec PDO en PHP en utilisant la requête SQL CREATE DATABASE
suivie du nom que l’on souhaite donner à notre base de données.
Pour exécuter une requête SQL en PDO, nous allons devoir utiliser la méthode exec()
qui va prendre en paramètre une requête SQL.
Voyons immédiatement le code de création d’une base de données qu’on appelle « pdodb ».
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Bases de données MySQL</h1> <?php $servername = 'localhost'; $username = 'root'; $password = 'root'; try{ $dbco = new PDO("mysql:host=$servername", $username, $password); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE DATABASE pdodb"; $dbco->exec($sql); echo 'Base de données créée bien créée !'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
On commence déjà par se connecter au serveur. Notez ici qu’on ne précise plus de nom de bases de données puisque nous allons la créer explicitement dans la suite du script. Bien évidemment, nous prenons toujours en charge les erreurs et exceptions.
Ensuite, nous écrivons notre requête SQL que nous enfermons dans une variable pour une plus grande liberté d’utilisation par la suite. Notez qu’on aurait aussi bien pu placer la requête directement en argument de exec()
. Par convention, nous écrirons toujours nos requêtes SQL en majuscule pour bien les séparer du reste du code.
On utilise donc enfin notre méthode exec()
(méthode qui appartient bien évidemment à notre classe PDO
) et on lui passe la variable contenant notre requête SQL en argument.
La méthode exec()
va se charger d’exécuter notre requête et de créer la base de données « pdodb ».
Vous pouvez aller vérifier dans votre phpMyAdmin, la nouvelle base de données a bien été créée.
Création d’une table en utilisant MySQL et PDO
Une base de données est constituée de tables. Les tables sont les « casiers » dans lesquelles nous allons stocker nos données. Mais avant de pouvoir stocker des données, il va déjà falloir apprendre à créer des tables dans notre base de données !
Pour créer une nouvelle table dans une base de données, nous allons utiliser la requête SQL CREATE TABLE
suivie du nom que l’on souhaite donner à notre table et nous allons également pouvoir préciser entre parenthèse le nom des colonnes de notre table ainsi que le type de données qui doit être stocké dans chaque colonne.
Les sous types de valeurs les plus courants et les plus utilisés sont :
INT
: accepte un nombre entier de 4 octets. La fourchette pour les entiers relatifs est [-2 147 483 648, 2 147 483 647], celle pour les entiers positifs est [0, 4 294 967 295] ;VARCHAR
: accepte une chaine de longueur variable (entre 0 et 65 535 caractères). La longueur effective réelle de la chaine dépend de la taille maximum d’une ligne ;TEXT
: accepte une chaine de caractère d’une longueur maximum de 65 535 caractères ;DATE
: accepte une date se situant entre le 1er janvier de l’an 1000 et le 31 décembre de l’an 9999.
En plus de cela, nous allons également pouvoir spécifier des attributs ou contraintes pour chacune des colonnes de notre table. Ces attributs ou contraintes vont venir apporter des contraintes supplémentaires sur les données attendues (non nulle, etc.) ou vont définir des comportements.
Voici les attributs qu’on va pouvoir ajouter à nos colonnes durant la création de notre table :
NOT NULL
– Signifie que chaque entrée doit contenir une valeur pour cette colonne. La valeurnull
n’est pas acceptée ;UNIQUE
– Chacune des valeurs dans la colonne doit être unique (est utile par exemple lorsqu’on reçoit des adresses mail, cela évite qu’un utilisateur s’inscrive deux fois sur notre site entre autres) ;PRIMARY KEY
– Est utilisé pour identifier de manière unique chaque nouvelle entrée dans une table. C’est une combinaison deNOT NULL
et deUNIQUE
.PRIMARY KEY
ne doit s’appliquer qu’à une colonne dans une table mais chaque table doit obligatoirement posséder une colonne avec unePRIMARY KEY
. La colonne avecPRIMARY KEY
est souvent une colonne d’ID (nombres) qui s’auto-incrémentent ;FOREIGN KEY
– Utilisée pour empêcher des actions qui pourraient détruire les liens entre des tables. LaFOREIGN KEY
sert à identifier une colonne qui est identique à une colonne portant unePRIMARY KEY
dans une autre table ;CHECK
– Sert à s’assurer que toutes les valeurs dans une colonne satisfont à une certaine condition ou se trouve dans un certain intervalle spécifié ;DEFAULT
value – Sert à définir une valeur par défaut qui va être renseignée si aucune valeur n’est fournie ;AUTO_INCREMENT
– MySQL va automatiquement incrémenter (c’est-à-dire ajouter 1) au champ pour chaque nouvelle entrée ;UNSIGNED
– Utilisé pour les données de type nombre, cette contrainte permet de limiter les données reçues aux nombres positifs (0 inclus).
Voyons immédiatement en pratique comment on pourrait créer une table « Clients » dans notre base « pdodb ».
Notre table va contenir 9 colonnes :
- Id
- Nom
- Prenom
- Adresse
- Ville
- CodePostal
- Pays
- DateInscription
<!DOCTYPE html> <html> <head> <title>Cours PHP / MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Bases de données MySQL</h1> <?php $servname = 'localhost'; $dbname = 'pdodb'; $user = 'root'; $pass = 'root'; try{ $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "CREATE TABLE Clients( Id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, Nom VARCHAR(30) NOT NULL, Prenom VARCHAR(30) NOT NULL, Adresse VARCHAR(70) NOT NULL, Ville VARCHAR(30) NOT NULL, Codepostal INT UNSIGNED NOT NULL, Pays VARCHAR(30) NOT NULL, Mail VARCHAR(50) NOT NULL, DateInscription TIMESTAMP, UNIQUE(Mail))"; $dbco->exec($sql); echo 'Table bien créée !'; } catch(PDOException $e){ echo "Erreur : " . $e->getMessage(); } ?> </body> </html>
Ici, nous créons donc la table « Clients » en utilisant la requête SQL CREATE TABLE Clients
. Entre les parenthèses, nous précisons les colonnes que doit contenir la table en indiquant déjà le type de données attendues et les contraintes relatives à chaque colonne et en définissant l’une de nos colonnes comme PRIMARY KEY
.
La syntaxe du SQL nous impose de séparer la déclaration de chaque colonne par une virgule.
Les chiffres entre parenthèses après les VARCHAR
sont facultatifs : ils permettent juste d’indiquer le maximum de caractère que la colonne peut accepter pour une valeur. Indiquer cela permet d’optimiser très marginalement la table mais est surtout considéré comme une bonne pratique.
Le type de valeur TIMESTAMP
signifie que la date courante sera stockée lors de chaque nouvelle entrée dans la table.
Finalement, vous pouvez remarquer qu’on ajoute une contrainte UNIQUE
pour notre colonne Mail de manière un peu différente du reste. C’est l’écriture conseillée en SQL.
Vous pouvez vérifier dans phpMyAdmin que la table a bien été créée avec ses colonnes en cliquant sur le nom de la table dans notre base de données puis en cliquant sur « Structure » :
Création d’une BDD et d’une table avec phpMyAdmin
Il va être très facile de créer une base de données et une table avec l’outil phpMyAdmin. Cependant, encore une fois, la limite est que nous devons faire cela « manuellement » et non pas dynamiquement.
Pour cela, rendez-vous sur la page d’accueil de phpMyAdmin. A partir de là, vous pouvez soit cliquer sur « Nouvelle base de données » dans la colonne de gauche, soit sur l’onglet « Bases de données en haut ».
Une fois arrivé ici, renseignez le nom de la base de données que vous souhaitez créer (on peut par exemple l’appeler « pdodb2 ») et cliquez sur « créer ».
phpMyAdmin crée la table et vous amène sur une page vous permettant déjà de créer une première table. Vous pouvez revenir sur cette même page en cliquant sur le nom de la base de données créée dans la liste des bases à gauche de votre page.
Créons donc à nouveau une table « Clients » avec cette fois-ci simplement 4 colonnes pour aller plus vite.
A partir de là, on vous propose de définir les colonnes de la table. Notre première colonne va se nommer Id, acceptant des données de type INT, UNSIGNED, PRIMARY KEY et AUTO_INCREMENT. Notre deuxième colonne est une colonne Nom, acceptant des données de type VARCHAR(30) et NOT NULL. Idem pour notre troisième colonne Prenom et finalement notre dernière colonne contient les dates d’inscription de nos clients.
Notez que dans phpMyAdmin, il suffit de ne pas cocher la case « Null » pour que notre colonne possède la contrainte NOT NULL.
Nous n’avons plus qu’à cliquer sur « Sauvegarder » afin que notre table et nos colonnes soient définitivement créées.