Simplification
Pour simplifier la gestion des futures tables, nous allons créer des fonctions correspondant aux différentes requêtes SQL utilisées.
Ces fonctions seront ajoutées dans un fichier model.php.
1
2
3
$db = require 'bdd.php';
4
/**5
* L’instruction global $db permet d’accéder à la variable $db6
* définie dans le fichier bdd.php.7
* 8
* Cette pratique n’est pas recommandée dans un projet en production,9
* car elle crée une dépendance globale.10
* 11
* Nous l’utilisons ici pour simplifier le code.12
* Elle sera supprimée lorsque nous aborderons la programmation orientée objet.13
*/14
15
/**16
* Récupérer avec une clause personnalisée17
* 18
* Exemple :19
* $admins = where(20
* 'utilisateurs',21
* ['email' => 'test@example.com', 'role' => 'admin']22
* );23
*/24
function where(string $table, array $conditions = []): array
25
{26
global $db;
27
28
$sql = "SELECT * FROM $table";
29
30
if ($conditions) {
31
$clauses = array_map(
32
fn($column) => "$column = :$column",
33
array_keys($conditions)
34
);
35
36
$sql .= ' WHERE ' . implode(' AND ', $clauses);
37
}
38
39
$stmt = $db->prepare($sql);
40
$stmt->execute($conditions);
41
42
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
43
}
44
45
/**46
* Récupérer toutes les lignes d'une table47
* 48
* Exemple :49
* $utilisateurs = all('utilisateurs');50
* foreach ($utilisateurs as $u) {51
* echo $u['nom'] . ' ' . $u['prenom'] . "\n";52
* }53
*/54
function all(string $table): array
55
{56
return where($table);
57
}
58
59
/**60
* Récupérer une ligne par ID61
* 62
* Exemple :63
* $utilisateur = find('utilisateurs', 3);64
* echo $utilisateur['nom'] ?? 'Non trouvé';65
*/66
function find(string $table, int $id): ?array
67
{68
return where($table, ['id' => $id])[0] ?? null;
69
}
70
71
/**72
* Insérer une ligne73
* 74
* Exemple :75
* $id = create('utilisateurs', ['nom' => 'Dupont', 'prenom' => 'Jean', 'email' => 'jean.dupont@example.com', 'role' => 'user']);76
* echo "Nouvel utilisateur créé avec l'id $id";77
*/78
function create(string $table, array $datas): int
79
{80
global $db;
81
82
$cols = implode(', ', array_keys($datas));
83
$values = ':' . implode(', :', array_keys($datas));
84
85
$stmt = $db->prepare("INSERT INTO `$table` ($cols) VALUES ($values)");
86
$stmt->execute($datas);
87
88
return (int) $db->lastInsertId();
89
}
90
91
/**92
* Mettre à jour une ligne par ID93
* 94
* Exemple :95
* $success = update('utilisateurs', ['id' => 3, 'nom' => 'Durand', 'prenom' => 'Paul', 'role' => 'admin']);96
* echo $success ? "Mise à jour OK" : "Erreur";97
*/98
function update(string $table, array $datas): bool
99
{100
global $db;
101
102
if (!isset($datas['id'])) {
103
throw new \InvalidArgumentException('ID manquant pour la mise à jour');
104
}
105
106
$id = $datas['id'];
107
unset($datas['id']);
108
109
$set = implode(', ', array_map(fn($k) => "$k = :$k", array_keys($datas)));
110
111
$sql = "UPDATE `$table` SET $set WHERE id = :id";
112
$stmt = $db->prepare($sql);
113
114
return $stmt->execute([...$datas, 'id' => $id]);
115
}
116
117
/**118
* Supprimer une ligne par ID119
* 120
* Exemple :121
* $success = delete('utilisateurs', 3);122
* echo $success ? "Suppression OK" : "Erreur";123
*/124
function delete(string $table, int $id): bool
125
{126
global $db;
127
128
$sql = "DELETE FROM `$table` WHERE id = :id";
129
$stmt = $db->prepare($sql);
130
131
return $stmt->execute(['id' => $id]);
132
}
133