Cette classe encapsule les opérations courantes de base de données via PDO : connexoin, exécution de requêtes, insertion, mise à jour et suppression.
<?php
class GestionnaireBD {
private $serveur = 'localhost';
private $base = 'nom_de_votre_base';
private $utilisateur = 'votre_utilisateur';
private $motDePasse = 'votre_mot_de_passe';
private $encodage = 'utf8mb4';
private $connexion;
public function __construct() {
try {
$dsn = "mysql:host={$this->serveur};dbname={$this->base};charset={$this->encodage}";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$this->connexion = new PDO($dsn, $this->utilisateur, $this->motDePasse, $options);
} catch (PDOException $e) {
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
}
/**
* Exécute une requête SELECT et retourne les résultats.
*/
public function lire(string $sql, array $params = []): ?array {
$stmt = $this->connexion->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
}
/**
* Exécute une requête INSERT, UPDATE ou DELETE et retourne le nombre de lignes affectées.
*/
public function executer(string $sql, array $params = []): int {
$stmt = $this->connexion->prepare($sql);
$stmt->execute($params);
return $stmt->rowCount();
}
/**
* Insère un enregistrement et retourne le nombre de lignes insérées.
*/
public function inserer(string $table, array $donnees): int {
$colonnes = implode(',', array_keys($donnees));
$marqueurs = ':' . implode(', :', array_keys($donnees));
$sql = "INSERT INTO {$table} ({$colonnes}) VALUES ({$marqueurs})";
return $this->executer($sql, $donnees);
}
/**
* Met à jour des enregistrements selon une condition et retourne le nombre de lignes modifiées.
*/
public function modifier(string $table, array $donnees, array $conditions): int {
$partiesSet = [];
foreach ($donnees as $col => $valeur) {
$partiesSet[] = "{$col} = :{$col}";
}
$set = implode(',', $partiesSet);
$partiesWhere = [];
$paramsWhere = [];
foreach ($conditions as $col => $valeur) {
$alias = 'w_' . $col;
$partiesWhere[] = "{$col} = :{$alias}";
$paramsWhere[$alias] = $valeur;
}
$where = implode(' AND ', $partiesWhere);
$sql = "UPDATE {$table} SET {$set} WHERE {$where}";
$params = array_merge($donnees, $paramsWhere);
return $this->executer($sql, $params);
}
/**
* Supprime des enregistrements selon des conditions et retourne le nombre de lignes supprimées.
*/
public function supprimer(string $table, array $conditions): int {
$partiesWhere = [];
$params = [];
foreach ($conditions as $col => $valeur) {
$alias = 'w_' . $col;
$partiesWhere[] = "{$col} = :{$alias}";
$params[$alias] = $valeur;
}
$where = implode(' AND ', $partiesWhere);
$sql = "DELETE FROM {$table} WHERE {$where}";
return $this->executer($sql, $params);
}
}
?>
Exemples d'utilisation
$db = new GestionnaireBD();
// Insertion
$nouvelUtilisateur = ['nom' => 'Jean Dupont', 'email' => 'jean.dupont@exemple.com'];
$lignesInserees = $db->inserer('utilisateurs', $nouvelUtilisateur);
// Mise à jour
$modifications = ['nom' => 'Jeanne Dupont'];
$condition = ['id' => $lignesInserees];
$db->modifier('utilisateurs', $modifications, $condition);
// Suppression
$db->supprimer('utilisateurs', ['id' => $lignesInserees]);
// Sélection
$resultats = $db->lire("SELECT * FROM utilisateurs WHERE email = :email", ['email' => 'jean.dupont@exemple.com']);
Veillez à remplacer les valeurs nom_de_votre_base, votre_utilisateur, votre_mot_de_passe par vos propres informations de conenxion. Adaptez également les noms de tables et de colonnes selon votre schéma.