Configuration de notre Base de donnée (config)

On commencera par mettre dans un fichier distinct tous nos paramètres de connexion.
Pourquoi un fichier distinct? Pour deux raisons principales.

  1. Pouvoir appeler ce fichier n'importe où au lieu de le recopier.
  2. Pouvoir sécuriser ce fichier qui contiendra des info précieuses.

<?php 
return array(
    "host" => 'localhost',
    // nom de ma base de donnée.
    "database" => 'superbdd',
    // nom d'utilisateur.
    "user" => 'root',
    // mot de passe 
    "password" => '',
    // charset, encodage des caractères.
    "charset" => 'utf8mb4',
)
 
        

Ces premières infos seront importante pour pouvoir se connecter.
Ensuite nous allons entrer dans le vif du sujet PDO.


// Options de PDO. sont aussi à ajouter à notre tableau.
    "options" => [
        // Mode d'affichage des erreurs.
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        // Mode de rangement des lignes de données de la BDD.
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        // Vérification de la compatibilité du driver avec les requêtes
        // préparés.
        PDO::ATTR_EMULATE_PREPARES => false
    ]
?>


        

Cette dernière partie comprend dans un tableau les options données à PDO.

  • PDO::ATTR_ERRMODE indique le type d'erreur que l'on souhaite
  • PDO::ATTR_DEFAULT_FETCH_MODE indique quel type de tableau on souhaite avoir lorsque PDO nous retourne le résultat d'une selection.
  • PDO::ATTR_EMULATE_PREPARES indique si l'on veut tester ou non nos requêtes préparés avant utilisation.

On lui demande donc de nous rendre nos erreurs sous forme d'exception,
nos résultats de recherche dans un tableau associatif,
et de ne pas tester les requêtes préparés.
Ce dernier point car cela peut laisser passer quelques failles de sécurité.

Connexion à la base de donnée (modèle)

Nous attaquons donc notre premier fichier modèle (le M de MVC).
Avant de pouvoir faire une quelconque requête SQL, il nous faut nous connecter.


$dsn = "mysql:host=".$config["host"]
    .";dbname=".$config["database"]
    .";charset=".$config["charset"];


        

Cette chaîne de caractère appelé DSN nous servira à chaque fois que l'on voudra se connecter.
Elle commence par le type de base de donnée avec laquelle on souhaite travailler, ici mysql.
Puis où elle se trouve (host), son nom (dbname) et l'encodage utilisé (charset).


function connexion(){
    // On inclu notre fichier de configuration
    $config = require("../config/config.php");

    $dsn = "mysql:host=".$config["host"]
    .";dbname=".$config["database"]
    .";charset=".$config["charset"];
    // On lance un try catch pour gérer les possibles erreurs.
    try{
        // On essaye (try) de créer notre connexion.
        $pdo = new PDO($dsn, $config["user"], $config["password"], $config["options"]);
        // En cas d'erreur, on capture (catch) l'erreur.
    }catch(\PDOException $e){
        // On affiche l'erreur avec le message et le code d'erreur.
        throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
    return $pdo;
}

        

On crée un nouvel objet PDO qui prend en paramètre le dsn, le nom d'utilisateur, le mot de passe ainsi que les possibles options.
Si tout s'est bien passé, aucune erreur s'affiche, et notre connexion se trouve dans la variable $pdo.
Il ne nous restera plus qu'à lancer les requêtes via cette variable. (voir le CRUD)

Fichiers complets :

  • Config
  • Modèle

<?php 
# ---- On pourrait ranger notre config dans des constantes ---- #
# ---- On pourrait ranger notre config dans des variables ---- #
# ---- On pourrait ranger notre config dans un fichier config.ini ---- #
/* L'host, où se situe notre base de donnée.
    Ici en local et non sur un serveur.*/
return array(
    "host" => 'localhost',
    // nom de ma base de donnée.
    "database" => 'superbdd',
    // nom d'utilisateur.
    "user" => 'root',
    // mot de passe 
    "password" => '',
    // charset, encodage des caractères.
    "charset" => 'utf8mb4',
    // Options de PDO.
    "options" => [
        // Mode d'affichage des erreurs.
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        // Mode de rangement des lignes de données de la BDD.
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        // Vérification de la compatibilité du driver avec les requêtes
        // préparés.
        PDO::ATTR_EMULATE_PREPARES => false
    ]
)
?>

            

<?php
function connexion(){
    // On inclu notre fichier de configuration
    $config = require("../config/config.php");

    $dsn = "mysql:host=".$config["host"]
    .";dbname=".$config["database"]
    .";charset=".$config["charset"];
    // On lance un try catch pour gérer les possibles erreurs.
    try{
        // On essaye (try) de créer notre connexion.
        $pdo = new PDO($dsn, $config["user"], $config["password"], $config["options"]);
        // En cas d'erreur, on capture (catch) l'erreur.
    }catch(\PDOException $e){
        // On affiche l'erreur avec le message et le code d'erreur.
        throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
    return $pdo;
}
?>