Simplification
Afin de simplifier la gestion de futures tables, nous allons réaliser des fonctions qui correspondent aux différentes requêtes sql que nous avons utilisées.
Nous ajouterons ces fonctions dans un fichier model.php.
require 'bdd.php';
// all('personnes') => $sql = "SELECT * FROM personnes"
function all(string $table)
{
...
}
// find('personne', 3) => $sql = "SELECT * FROM personne WHERE id=:id"
function find(string $table, int $id)
{
...
}
// where('users', 'email = :email AND password = :password', compact(['email', 'password'])) => $sql = "SELECT * from users WHERE email = :email AND password = :password"
function clause(string $table, string $where, array $datas)
{
...
}
// create('personnes', ['nom'=>'dupont', 'prenom'=>'jean']) => $sql = "INSERT INTO personnes (nom, prenom) VALUES (:nom, :prenom)"
function create(string $table, array $datas): int
{
...
}
// update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean']) => $sql = "UPDATE personnes SET id = :id, nom =:nom, prenom = :prenom WHERE id = :id"
function update(string $table, array $datas): string
{
...
}
// delete('personnes', 3) => $sql = "DELETE FROM personnes WHERE id= :id"
function delete(string $table, int $id): string
{
...
}
Méthode : Récupération de tous les enregistrements d'une table
La fonction all doit permettre de récupérer l'ensemble des enregistrements d'une table.
$listePersonnes = all('personnes');
function all($table)
{
global $db;
$sql = "SELECT * FROM $table";
$statement = $db->prepare($sql);
$statement->execute();
return $statement->fetchAll();
}
global $db;
Permet d'utiliser la variable $db qui appartient au contexte global.
Méthode : Récupération d'un enregistrement en fonction de son id
La fonction find doit permettre de récupérer un enregistrement en fonction de son id.
$personne = find('personnes', 3);
function find($table, $id)
{
global $db;
$sql = "SELECT * FROM $table WHERE id = :id";
$statement = $db->prepare($sql);
$statement->execute(compact('id'));
return $statement->fetch();
}
Méthode : Récupération de tous les enregistrements en fonction d'une clause
La fonction where doit permettre de récupérer l'ensemble des enregistrements en fonction d'une clause.
$listeUsers = where('users', 'email = :email AND password = :password', compact(['email', 'password']));
function where(string $table, string $where, array $datas)
{
global $db;
$sql = "SELECT * FROM $table WHERE $where";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $statement->fetchAll();
}
Méthode : Insertion d'un enregistrement
La fonction create doit permettre d'ajouter un enregistrement à la table.
create('personnes', ['nom'=>'dupont', 'prenom'=>'jean'])
function create(string $table, array $datas): int
{
global $db;
$champs = implode(',', array_keys($datas));
$values = implode(", :", array_keys($datas));
$sql = "INSERT INTO $table ($champs) VALUES (:$values)";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $db->lastInsertId();
}
array_keys($datas)
Permet de récupérer les clés du tableau $datas.
implode(',', array_keys($datas))
Permet de générer une chaîne de caractères des clés : nom, prenom.
implode(", :", array_keys($datas))
Permet de générer une chaine de caractères des clés précédées de deux points : :nom, :prenom.
Méthode : Modification d'un enregistrement
La fonction update doit permettre de modifier un enregistrement de la table.
update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean'])
function update(string $table, array $datas): string
{
global $db;
$set = implode(
', ',
array_map(
fn($key) => "$key = :$key",
array_keys($datas)
)
);
$sql = "UPDATE $table SET $set WHERE id = :id";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $sql;
}
array_map(fn($key) => "$key = :$key", array_keys($datas))
Permet de générer un tableau qui contient des chaînes de caractères des clés et de leur marqueur :
['id = :id', 'nom = :nom', 'prenom = :prenom'].
Méthode : Suppression d'un enregistrement
La fonction delete doit permettre de supprimer un enregistrement de la table.
delete('personnes', 3)
function delete(string $table, int $id): string
{
global $db;
$sql = "DELETE FROM $table WHERE id=:id";
$statement = $db->prepare($sql);
$statement->execute(compact('id'));
return $sql;
}
Définition : model.php
require 'bdd.php';
// all('personnes') => $sql = "SELECT * FROM personnes"
function all(string $table)
{
global $db;
$sql = "SELECT * FROM $table";
$statement = $db->prepare($sql);
$statement->execute();
return $statement->fetchAll();
}
// find('personne', 3) => $sql = "SELECT * FROM personne WHERE id=:id"
function find(string $table, int $id)
{
global $db;
$sql = "SELECT * FROM $table WHERE id = :id";
$statement = $db->prepare($sql);
$statement->execute(compact('id'));
return $statement->fetch();
}
// where('users', 'email = :email AND password = :password', compact(['email', 'password'])) => $sql = "SELECT * from users WHERE email = :email AND password = :password"
function where(string $table, string $where, array $datas)
{
global $db;
$sql = "SELECT * FROM $table WHERE $where";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $statement->fetchAll();
}
// create('personnes', ['nom'=>'dupont', 'prenom'=>'jean']) => $sql = "INSERT INTO personnes (nom, prenom) VALUES (:nom, :prenom)"
function create(string $table, array $datas): int
{
global $db;
$champs = implode(',', array_keys($datas));
$values = implode(", :", array_keys($datas));
$sql = "INSERT INTO $table ($champs) VALUES (:$values)";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $db->lastInsertId();
}
// update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean']) => $sql = "UPDATE personnes SET id = :id, nom =:nom, prenom = :prenom WHERE id = :id"
function update(string $table, array $datas): string
{
global $db;
$set = implode(
', ',
array_map(
fn($key) => "$key = :$key",
array_keys($datas)
)
);
$sql = "UPDATE $table SET $set WHERE id = :id";
$statement = $db->prepare($sql);
$statement->execute($datas);
return $sql;
}
// delete('personnes', 3) => $sql = "DELETE FROM personnes WHERE id= :id"
function delete(string $table, int $id): string
{
global $db;
$sql = "DELETE FROM $table WHERE id=:id";
$statement = $db->prepare($sql);
$statement->execute(compact('id'));
return $sql;
}