Classe simple d'accès aux bases de données avec PDO en PHP

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.

Étiquettes: PDO PHP base de données crud SQL

Publié le 13 juin à 23h28