Connexion à PDO MySQL

Connexion à PDO MySQL

Tags : Base de données, PHP, Ressources
Catégorie : Lemon Cake
Mise en ligne : 28 Janvier 2014 à 13:00

PDO ou PHP Data Objects est une classe PHP permettant de se connecter à une base de donnée. Pour utiliser PDO il faut la version 5.1.0 de PHP. Afin de voir si cette extension est installée sur votre serveur, utiliser la fonction phpinfo() et recherchez la ligne PDO Driver.

La déclaration de connexion à PDO se fait de la manière suivante :

$db = new PDO('mysql:host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->exec('SET NAMES utf8');

Et à chaque fois que vous voulez exécuter une requête dans vos pages vous devez copier ceci puis faire :

$db->prepare("VOTRE REQUETE");
$db->execute();
// Traitement
$db->closeCursor();

Sans oublier le fait que si il y à une erreur, vous devez récupérer le message et surtout gérer les exceptions générées en cas d'erreurs. Du coup afin de faciliter le tout j'ai créer une petite classe PHP qui extend de PDO et qui permet de se connecter plus facilement :

<?php

    if ($_SERVER['SERVER_ADDR'] == "127.0.0.1") {
        define("DB_HOST", "localhost");
        define("DB_NAME", "babeuloula");
        define("DB_USER", "root");
        define("DB_PASS", "");
    } else {
        define("DB_HOST", "");
        define("DB_NAME", "");
        define("DB_USER", "");
        define("DB_PASS", "");
    }

    class database extends PDO {

        private $dbhost = DB_HOST;
        private $dbname = DB_NAME;
        private $dbuser = DB_USER;
        private $dbpass = DB_PASS;
        private $erreur = "";
        private $conn;
        private $db;

        public function __construct() {
            if (!$this->conn) {
                try {
                    $this->db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
                    $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                    $this->db->exec('SET NAMES utf8');
                    $this->conn = true;
                    return $this->conn;
                } catch (PDOException $e) {
                    $this->erreur = $e->getMessage();
                    $this->conn = false;
                    return $this->conn;
                }
            } else {
                return $this->conn = true;
            }
        }

        public function getDataBase() {
            return $this->db;
        }

        public function getErreur() {
            return $this->erreur;
        }

    }

?>

J'encadre directement la connexion et en cas d'erreurs, je l'affiche. Je regarde aussi si la connexion est toujours ouverte ou non.

Vous pensez sans doute qu'il n'y à pas trop d'intérêt mais devoir à chaque fois recopier les codes d'accès dans toutes les pages de connexions à la base, devoir les changer lors du passage en production tout cela est fastidieux.

Voici comment l'utiliser :

<?php

    require_once 'database.class.php';

    $config = new database();

    if($config) {
        $db = $config->getDataBase();

        $requete = $db->prepare("REQUETE");
        if($requete->execute()) {
            // Traitement
        } else {
            $config->getErreur();
        }

        $requete->closeCursor();
    } else {
        $config->getErreur();
    }

?>

N'hésitez pas à me dire ce que vous en pensez, et si vous avez des améliorations à proposer. Elle est dispo sur mon GitHub au cas où : https://github.com/babeuloula/database-PDO

<Laisser un commentaire/>

* Champs obligatoire