Types de données (MySQL)
| Type | Exemple | Description |
|---|---|---|
INT |
id INT AUTO_INCREMENT |
Nombre entier (ex: ID, âge, quantité). |
VARCHAR(n) |
nom VARCHAR(50) |
Chaîne de caractères de longueur variable, maximum n caractères (ex: nom, email). |
TEXT |
description TEXT |
Chaîne de caractères longue (ex: contenu d'un article, commentaire). |
DECIMAL(m,d) |
prix DECIMAL(10,2) |
Nombre décimal exact. Idéal pour les prix (10 chiffres au total, dont 2 après la virgule). |
DATE / DATETIME |
created_at DATETIME |
DATE (YYYY-MM-DD) ou DATETIME (YYYY-MM-DD HH:MM:SS). |
BOOLEAN |
is_active BOOLEAN |
Souvent stocké comme TINYINT(1) (0 pour faux, 1 pour vrai). |
DDL : Structure de la base de données et des tables
Le DDL (Data Definition Language) permet de créer, modifier et supprimer la structure de vos bases de données.
| Action | Commande SQL | Exemple | Détails |
|---|---|---|---|
| Créer DB | CREATE DATABASE |
|
Crée une nouvelle base. Définir le `CHARACTER SET` à utf8mb4 est une bonne pratique pour gérer tous les caractères (y compris les émojis). |
| Créer Table | CREATE TABLE |
|
Définit les colonnes et leurs types.
|
| Modifier Table | ALTER TABLE |
|
Permet de changer la structure d'une table existante sans perdre les données (sauf en cas de suppression de colonne). |
| Supprimer | DROP |
|
Supprime définitivement la structure et toutes les données qu'elle contient. IF EXISTS évite une erreur si l'élément n'existe pas. |
CRUD : Les 4 opérations de base
| Action | Commande SQL | Exemple | Description |
|---|---|---|---|
| C (Create) | INSERT INTO |
|
Ajoute une nouvelle ligne dans la table. |
| C (Create en masse) | INSERT INTO ... VALUES ... |
|
Pour ajouter plusieurs lignes en une seule requête, il suffit de séparer les groupes de valeurs par des virgules. C'est beaucoup plus performant que de faire plusieurs requêtes séparées. |
| R (Read) | SELECT |
|
Récupère des données. * sélectionne toutes les colonnes. |
| U (Update) | UPDATE |
|
Modifie des données existantes. ⚠️ Toujours utiliser WHERE sinon toute la table est modifiée ! |
| D (Delete) | DELETE |
|
Supprime des lignes. ⚠️ Toujours utiliser WHERE sinon toute la table est effacée ! |
Filtrage et Tri (Clauses)
| Clause | Exemple | Description |
|---|---|---|
WHERE |
|
Filtre les résultats selon une condition. |
AND / OR |
|
Combine plusieurs conditions. |
LIKE |
|
Recherche partielle. % est un joker (n'importe quelle chaîne de caractères). |
ORDER BY |
|
Trie les résultats. ASC (croissant, défaut) ou DESC (décroissant). |
LIMIT |
|
Limite le nombre de résultats retournés (ex: les 5 derniers articles). |
Fonctions d'agrégation
| Fonction | Exemple | Description |
|---|---|---|
COUNT() |
SELECT COUNT(*) FROM eleves; |
Compte le nombre de lignes. |
SUM() |
SELECT SUM(prix) FROM commandes; |
Calcule la somme d'une colonne numérique. |
AVG() |
SELECT AVG(note) FROM bulletins; |
Calcule la moyenne d'une colonne. |
MAX() / MIN() |
SELECT MAX(prix) FROM produits; |
Trouve la valeur la plus haute ou la plus basse. |
Jointures (Joins)
Les jointures permettent de combiner les données de deux tables liées par une clé étrangère.
| Type | Syntaxe | Résultat |
|---|---|---|
INNER JOIN |
|
Retourne les lignes uniquement s'il y a une correspondance dans les deux tables (ex: utilisateurs QUI ont passé une commande). |
LEFT JOIN |
|
Retourne toutes les lignes de la table de gauche (users), même s'il n'y a pas de correspondance à droite (commandes). Utile pour trouver les utilisateurs SANS commande. |
Intégration PHP avec PDO
PDO (PHP Data Objects) est l'interface standard pour accéder aux bases de données en PHP. Elle est sécurisée et orientée objet.
1. Connexion à la base de données (DB)
try {
// DSN (Data Source Name), Username, Password
$pdo = new PDO('mysql:host=localhost;dbname=mon_site;charset=utf8', 'root', 'root');
// Activer les erreurs PDO (important pour le débug)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Récupérer les résultats sous forme de tableau associatif par défaut
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (Exception $e) {
die('Erreur de connexion : ' . $e->getMessage());
}2. Requêtes simples (sans variables) - query()
À utiliser uniquement quand il n'y a aucune variable externe dans la requête.
$sql = "SELECT * FROM produits ORDER BY prix ASC";
$stmt = $pdo->query($sql);
// Récupérer tous les résultats
$produits = $stmt->fetchAll();
foreach ($produits as $prod) {
echo $prod['nom'] . "<br>";
}3. Requêtes préparées (avec variables) - prepare() & execute()
Indispensable pour la sécurité (protection contre les injections SQL) dès qu'on utilise des données utilisateur ($_POST, $_GET).
| Action | Exemple de code |
|---|---|
| Lecture sécurisée | |
| Ecriture sécurisée | |