PHP-MySQL Cheatsheet
Définitions
- Base de données
- Tables
- Champs (colonne)
- Enregistrement (donnée ou ligne)
Il faut toujours distinguer la structure d’une base de données et les données d’une base de données.
Deux règles d’or : 1. Pas de duplication de données, et 2. La structure est indépendante des données
phpMyAdmin – Interface d’administration de la base de données
Adresse en local : http://localhost/phpMyAdmin
Adresse sur votre serveur au CREMI: https://pedagovic.uf-mi.u-bordeaux.fr/phpmyadmin/
Objectif : phpMyAdmin vous permet de concevoir une base de données via une interface graphique.
En particulier, dans le cadre de mon cours CSWD, vous l’utilisez pour les actions suivantes, en respectant certaines conventions :
- Création d’une seule base de données
- Dans le cadre du cours, nous travaillons sur une seule base de données s’appelant “conceptionweb” en local. Sur le serveur, elle s’appelle comme votre login. Cette base de données peut contenir plusieurs tables.
- Création des tables
- Choisissez des noms de tables en tout minuscules, sans accents, et sans espaces
- Création des champs
- Dans chaque table, le premier champ doit s’appeler
id
, il doit être de type entier INT et être une clé primaire, et l’identifiant doit être attribué automatiquement (AUTO_INCREMENT, A_I)
- Dans chaque table, le premier champ doit s’appeler
- Conventions de noms
- Noms des tables en singulier. Vous ne devez pas répéter le nom de la table dans les noms des champs. Noms des champs en clé étrangère
id_nomdelatable
.
- Noms des tables en singulier. Vous ne devez pas répéter le nom de la table dans les noms des champs. Noms des champs en clé étrangère
- Création d’enregistrements
- Pour chaque table, créez au moins 2 données pour bien comprendre votre modèle de données
MySQL
Les instructions les plus courantes pour manipuler les données MySQL sont décrites ci-dessous :
Commande SQL | Explication | Opération CRUD |
---|---|---|
INSERT | Permet d’ajouter un ou plusieurs enregistrements à une table. | (Create) |
SELECT | Permet de récupérer un ou plusieurs enregistrements d’une table. | (Read) |
UPDATE | Permet de modifier un ou plusieurs enregistrements d’une table. | (Update) |
DELETE | Permet d’effacer un ou plusieurs enregistrements d’une table. | (Delete) |
PHP : inclusion du fichier
Dans chaque fichier qui veut accéder à la base de données, incluez le fichier connexion_base.php comme suit :
require_once("connexion_base.php");
Read : Exemple en PHP de requête SELECT avec parcours de données
Pour récupérer tous les enregistrements d’une table commentaire
dans un tableau indexés d’un tableau associatif :
<?php
// exécuter une requete MySQL de type SELECT
$requete = "SELECT * FROM commentaire;";
$reponse = $pdo->prepare($requete);
$reponse->execute();
// récupérer tous les enregistrements dans un tableau
$enregistrements = $reponse->fetchAll();
// connaitre le nombre d'enregistrements
$nombreReponses = count($enregistrements);
// parcourir le tableau des enregistrements
for ($i=0; $i<count($enregistrements); $i++)
{echo $enregistrements[$i]['nom'];
echo $enregistrements[$i]['texte'];
echo $enregistrements[$i]['date'];
}?>
Pour récupérer un seul enregistrement spécifique d’une table commentaire
dans un tableau associatif :
<?php
// Récupérer une seule ligne
$requete = "SELECT * FROM commentaire WHERE id = ?;";
$reponse = $pdo->prepare($requete);
$reponse->execute(array($id));
$un_seul_enregistrement = $reponse->fetch(); // Retourne un seul enregistrement (ou false si non trouvé)
echo $un_seul_enregistrement['nom'];
echo $un_seul_enregistrement['texte'];
echo $un_seul_enregistrement['date'];
?>
Donc différence entre fetch() et fetchAll() :
fetchAll()
: Récupère tous les enregistrements sous forme d’un tableau contenant des tableaux associatifs. À utiliser lorsque plusieurs résultats sont attendus.fetch()
: Récupère un seul enregistrement sous forme de tableau associatif. Retournefalse
si aucun résultat n’est trouvé.
Create : Exemple en PHP de requête INSERT
<?php
$nom = "Lafontaine"; // ou p.ex. récupération depuis un formulaire
$texte = "Article très intéressant"; // ou p.ex. récupération depuis un formulaire
// exécuter une requete MySQL de type INSERT
$requete="INSERT INTO commentaire (nom, texte, date) VALUES (?,?,NOW())";
$reponse=$pdo->prepare($requete);
$reponse->execute(array($nom, $texte));
?>
Connexion en PHP à une base de données MySQL : connexion_base.php
Fichier PHP (connexion_base.php
):
<?php
// définition des paramètres de connexion à la base de données
$config_base['hote'] = "localhost";
$config_base['utilisateur'] = "root";
$config_base['motdepasse'] = "root"; // si Wampserver, mettez "" ici
$config_base['nom_base'] = "conceptionweb";
if (substr($_SERVER['SERVER_NAME'],-17) == "emi.u-bordeaux.fr")
{$config_base['hote'] = "mariadb";
$config_base['utilisateur'] = "loginENT";
$config_base['motdepasse'] = "MOTDEPASSE";
$config_base['nom_base'] = "loginENT";
}
// connexion à la base de données
try {
$pdo = new PDO( "mysql:host={$config_base['hote']};
dbname={$config_base['nom_base']}",
"{$config_base['utilisateur']}",
"{$config_base['motdepasse']}");
// afficher les messages d'erreurs pour trouver les erreurs
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
// jeu de caractères : UTF-8
$pdo->query("SET NAMES utf8");
$pdo->query("SET CHARACTER SET utf8");
}catch (PDOException $exception) {
echo "Connexion échouée : " . $exception->getMessage();
}?>
Exemple de base de données
Exemple 1
Table pays et Table continent
id | nom | population | id_continent |
---|---|---|---|
INT | TEXT | INT | INT |
1 | Brésil | 201103330 | 2 |
2 | France | 64768389 | 1 |
3 | Suisse | 7581000 | 1 |
id | nom |
---|---|
INT | TEXT |
1 | Europe |
2 | Amériques |
Structure
- Il y a deux tables :
- Une table pays avec 4 champs (ou attributes ou columns).
- Une table continent avec 2 champs.
- Relation 1:n (one-to-many) :
- Un pays appartient à un seul continent.
- Un continent peut contenir plusieurs pays.
Données
- 3 enregistrements (lignes) dans la table pays.
- 2 enregistrements dans la table continent.
Exemple 2
Table nouvelle, Table tag et Table nouvelle_tag
Table nouvelle
id | texte | date |
---|---|---|
INT | TEXT | DATETIME |
1 | L’AS Saint Etienne en route vers la Ligue 1 | 2024-02-02 08:32:31 |
2 | Encore un James Bond avec Daniel Craig ? | 2024-11-26 11:03:22 |
3 | Droit à une feuille manuscrite à l’examen | 2025-04-01 11:23:01 |
4 | Les JO 2024 de Paris était super | 2025-03-26 17:52:40 |
Table tag
id | nom |
---|---|
INT | TEXT |
1 | Sport |
2 | Foot |
3 | Cinéma |
4 | Université |
5 | People |
Table nouvelle_tag (table de jointure)
id | id_nouvelle | id_tag |
---|---|---|
INT | INT | INT |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
4 | 2 | 5 |
5 | 3 | 4 |
6 | 4 | 1 |
Structure
- Il y a trois tables :
- Une table nouvelle avec 3 champs (attributes ou columns).
- Une table tag avec 2 champs.
- Une table de jointure nouvelle_tag avec 3 champs, dont 1 clé primaire et 2 clés étrangères.
- Relation n:m (many-to-many) :
- Une nouvelle peut avoir plusieurs tags.
- Un tag peut être associé à plusieurs nouvelles.
Données
- 4 enregistrements dans la table nouvelle.
- 5 enregistrements dans la table tag.
- 6 enregistrements dans la table de jointure nouvelle_tag.