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.

1
<?php
2
require 'bdd.php';
3
4
// all('personnes') => $sql = "SELECT * FROM personnes"
5
function all(string $table)
6
{
7
  ...
8
}
9
10
// find('personne', 3) => $sql = "SELECT * FROM personne WHERE id=:id"
11
function find(string $table, int $id)
12
{
13
  ...
14
}
15
16
// where('users', 'email = :email AND password = :password', compact(['email', 'password'])) => $sql = "SELECT * from users WHERE email = :email AND password = :password"
17
function clause(string $table, string $where, array $datas)
18
{
19
  ...
20
}
21
22
// create('personnes', ['nom'=>'dupont', 'prenom'=>'jean']) => $sql = "INSERT INTO personnes (nom, prenom) VALUES (:nom, :prenom)"
23
function create(string $table, array $datas): int
24
{
25
  ...
26
}
27
28
// update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean']) => $sql = "UPDATE personnes SET id = :id, nom =:nom, prenom = :prenom WHERE id = :id"
29
function update(string $table, array $datas): string
30
{
31
  ...
32
}
33
34
// delete('personnes', 3) => $sql = "DELETE FROM personnes WHERE id= :id"
35
function delete(string $table, int $id): string
36
{
37
  ...
38
}

MéthodeRé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.

1
$listePersonnes = all('personnes');
1
function all($table)
2
{
3
    global $db;
4
5
    $sql = "SELECT * FROM $table";
6
7
    $statement = $db->prepare($sql);
8
    $statement->execute();
9
10
    return $statement->fetchAll();
11
}
1
global $db;

Permet d'utiliser la variable $db qui appartient au contexte global.

MéthodeRé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.

1
$personne = find('personnes', 3);
1
function find($table, $id)
2
{
3
    global $db;
4
5
    $sql = "SELECT * FROM $table WHERE id = :id";
6
7
    $statement = $db->prepare($sql);
8
    $statement->execute(compact('id'));
9
10
    return $statement->fetch();
11
}

MéthodeRé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.

1
$listeUsers = where('users', 'email = :email AND password = :password', compact(['email', 'password']));
1
function where(string $table, string $where, array $datas)
2
{
3
    global $db;
4
5
    $sql = "SELECT * FROM $table WHERE $where";
6
7
    $statement = $db->prepare($sql);
8
    $statement->execute($datas);
9
10
    return $statement->fetchAll();
11
}

MéthodeInsertion d'un enregistrement

La fonction create doit permettre d'ajouter un enregistrement à la table.

1
create('personnes', ['nom'=>'dupont', 'prenom'=>'jean'])
1
function create(string $table, array $datas): int
2
{
3
    global $db;
4
5
    $champs = implode(',', array_keys($datas));
6
    $values = implode(", :", array_keys($datas));
7
8
    $sql = "INSERT INTO $table ($champs) VALUES (:$values)";
9
10
    $statement = $db->prepare($sql);
11
    $statement->execute($datas);
12
13
    return $db->lastInsertId();
14
}
1
array_keys($datas)

Permet de récupérer les clés du tableau $datas.

1
implode(',', array_keys($datas))

Permet de générer une chaîne de caractères des clés : nom, prenom.

1
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éthodeModification d'un enregistrement

La fonction update doit permettre de modifier un enregistrement de la table.

1
update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean'])
1
function update(string $table, array $datas): string
2
{
3
    global $db;
4
5
    $set = implode(
6
        ', ',
7
        array_map(
8
            fn($key) => "$key = :$key",
9
            array_keys($datas)
10
        )
11
    );
12
13
    $sql = "UPDATE $table SET $set WHERE id = :id";
14
15
    $statement = $db->prepare($sql);
16
    $statement->execute($datas);
17
18
    return $sql;
19
}
1
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éthodeSuppression d'un enregistrement

La fonction delete doit permettre de supprimer un enregistrement de la table.

1
delete('personnes', 3)
1
function delete(string $table, int $id): string
2
{
3
    global $db;
4
5
    $sql = "DELETE FROM $table WHERE id=:id";
6
7
    $statement = $db->prepare($sql);
8
    $statement->execute(compact('id'));
9
10
    return $sql;
11
}

Définitionmodel.php

1
<?php
2
require 'bdd.php';
3
4
// all('personnes') => $sql = "SELECT * FROM personnes"
5
function all(string $table)
6
{
7
    global $db;
8
9
    $sql = "SELECT * FROM $table";
10
11
    $statement = $db->prepare($sql);
12
    $statement->execute();
13
14
    return $statement->fetchAll();
15
}
16
17
// find('personne', 3) => $sql = "SELECT * FROM personne WHERE id=:id"
18
function find(string $table, int $id)
19
{
20
    global $db;
21
22
    $sql = "SELECT * FROM $table WHERE id = :id";
23
24
    $statement = $db->prepare($sql);
25
    $statement->execute(compact('id'));
26
27
    return $statement->fetch();
28
}
29
30
// where('users', 'email = :email AND password = :password', compact(['email', 'password'])) => $sql = "SELECT * from users WHERE email = :email AND password = :password"
31
function where(string $table, string $where, array $datas)
32
{
33
    global $db;
34
35
    $sql = "SELECT * FROM $table WHERE $where";
36
37
    $statement = $db->prepare($sql);
38
    $statement->execute($datas);
39
40
    return $statement->fetchAll();
41
}
42
43
// create('personnes', ['nom'=>'dupont', 'prenom'=>'jean']) => $sql = "INSERT INTO personnes (nom, prenom) VALUES (:nom, :prenom)"
44
function create(string $table, array $datas): int
45
{
46
    global $db;
47
48
    $champs = implode(',', array_keys($datas));
49
    $values = implode(", :", array_keys($datas));
50
51
    $sql = "INSERT INTO $table ($champs) VALUES (:$values)";
52
53
    $statement = $db->prepare($sql);
54
    $statement->execute($datas);
55
56
    return $db->lastInsertId();
57
}
58
59
// update('personnes', ['id'=>3, 'nom'=>'dupont', 'prenom'=>'jean']) => $sql = "UPDATE personnes SET id = :id, nom =:nom, prenom = :prenom WHERE id = :id"
60
function update(string $table, array $datas): string
61
{
62
    global $db;
63
64
    $set = implode(
65
        ', ',
66
        array_map(
67
            fn($key) => "$key = :$key",
68
            array_keys($datas)
69
        )
70
    );
71
72
    $sql = "UPDATE $table SET $set WHERE id = :id";
73
74
    $statement = $db->prepare($sql);
75
    $statement->execute($datas);
76
77
    return $sql;
78
}
79
80
// delete('personnes', 3) => $sql = "DELETE FROM personnes WHERE id= :id"
81
function delete(string $table, int $id): string
82
{
83
    global $db;
84
85
    $sql = "DELETE FROM $table WHERE id=:id";
86
87
    $statement = $db->prepare($sql);
88
    $statement->execute(compact('id'));
89
90
    return $sql;
91
}
92