[TUTORIEL] Class Database (connexion/requête/requête_préparée)

Westiix

Fortnite Player || PHP & VB.NET
Premium
Inscription
5 Octobre 2011
Messages
2 219
Réactions
88
Points
12 753
Bonjours tout le monde,

Dans ce bref tutoriel je vais vous montré une façon simple & classe pour vous connecté à votre BDD (Base De Donnée MySQL).

Éditeur utilisé : Sublime Text 3
======================================================

TUTO VIDEO
Vous devez être inscrit pour voir les médias

Lien :


SOMMAIRE | TUTO ECRIT
I) Création de la class
II) Utilisé la class


I) Création de la class

On commence par crée notre fichier, pour ma part je l'appellerai "Database.php"

On ouvre PHP dans notre fichier fraîchement crée :
img
PHP:
<?php

On crée la class Database (comme le nom du fichier):
img
PHP:
<?php

class Database{

}

On crée des variables privés (ces eux qui stockerons les identifiants de la base de donnée) :
img

PHP:
<?php

class Database{

       /*
        $db_name = Nom de la base de donnée
        $db_user = Utilisateur de la base de donnée
        $db_mdp = Mot de passe de la base de donnée
        $db_host = HOST de la base de donnée

               $pdo = stockera la connexion à la Base De Donnée
    */
    private $db_name;
    private $db_user;
    private $db_mdp;
    private $db_host;
    private $pdo;

}
On crée le constructeur de la class :
img
PHP:
<?php

class Database{

    /*
        $db_name = Nom de la base de donnée
        $db_user = Utilisateur de la base de donnée
        $db_mdp = Mot de passe de la base de donnée
        $db_host = HOST de la base de donnée
    */
    private $db_name;
    private $db_user;
    private $db_mdp;
    private $db_host;
    private $pdo;


    /*
        Le champ $db_name = nom_bdd (Nom de la Base De Donnée)
        Le champ $db_user = 'root' par défault (si ont ne défini pas $db_user)
        Le champ $db_mdp = '' par défault (si ont ne défini pas $db_mdp)
        Le champ $db_host = 'localhost' par défault (si ont ne défini pas $db_host)

        $this->db_name = private $db_name;
        $this->db_user = private $db_user;
        $this->db_mdp = private $db_mdp;
        $this->db_host = private $db_host;

        On attribue les valeurs qui sont passé en paramètre à nos variables privées
    */
    public function __construct($db_name, $db_user = 'root', $db_mdp = '', $db_host = 'localhost'){
        $this->db_name = $db_name;
        $this->db_user = $db_user;
        $this->db_mdp = $db_mdp;
        $this->db_host = $db_host;
    }

}
Maintenant on va crée une fonction privée qui se chargera de récupérer PDO tout seul :
img
PHP:
    /*
        Explication de la fonction "getPDO()" :

        SI $this->pdo (private $pdo) = null (si il a aucune valeur) ALORS
        On crée une instance de PDO avec comme host = $this->db_host (private $db_host) ; dbname = $this->db_name (private $db_name) ; user = $this->db_user (private $db_user), mdp = $this->db_mdp (private $db_mdp)

        Ont remplit $this->pdo (private $pdo) par l'instance PDO que l'on vient de crée
        Et on retourne $this->pdo (où ont a stocké l'instance de PDO)
    */
    private function getPDO(){
        if($this->pdo == null){
            $pdo = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_mdp);
            $this->pdo = $pdo;
        }

        return $this->pdo;
    }

}
Désormais, il nous reste plus à crée la fonction pour effectuer des requêtes :
img
PHP:
    /*

        Explication de la fonction "query($requete)" :

        SI $args = pleins ALORS
            on effectue une requete préparée avec les arguments du tableau $args
        SINON
            on effectue une simple requete

       On retourne l'instance de la requête($req)

    */
    public function query($requete, $args = array(null)){
        if(!empty($args)){
            $req = $this->getPDO()->prepare($requete);
            $req->execute($args);
        } else {
            $req = $this->getPDO()->query($requete);
        }
    
        return $req;
    }
CODE FINAL :
PHP:
<?php

class Database{

    /*
        $db_name = Nom de la base de donnée
        $db_user = Utilisateur de la base de donnée
        $db_mdp = Mot de passe de la base de donnée
        $db_host = HOST de la base de donnée
    */
    private $db_name;
    private $db_user;
    private $db_mdp;
    private $db_host;
    private $pdo;


    /*
        Explication du constructeur :

        Le champ $db_name = nom_bdd (Nom de la Base De Donnée)
        Le champ $db_user = 'root' par défault (si ont ne défini pas $db_user)
        Le champ $db_mdp = '' par défault (si ont ne défini pas $db_mdp)
        Le champ $db_host = 'localhost' par défault (si ont ne défini pas $db_host)

        $this->db_name = private $db_name;
        $this->db_user = private $db_user;
        $this->db_mdp = private $db_mdp;
        $this->db_host = private $db_host;

        On attribue les valeurs qui sont passé en paramètre à nos variables privées
    */
    public function __construct($db_name, $db_user = 'root', $db_mdp = '', $db_host = 'localhost'){
        $this->db_name = $db_name;
        $this->db_user = $db_user;
        $this->db_mdp = $db_mdp;
        $this->db_host = $db_host;
    }


    /*
        Explication de la fonction "getPDO()" :

        SI $this->pdo (private $pdo) = null (si il a aucune valeur) ALORS
            On crée une instance de PDO avec comme host = $this->db_host (private $db_host) ; dbname = $this->db_name (private $db_name) ; user = $this->db_user (private $db_user), mdp = $this->db_mdp (private $db_mdp)

        Ont remplit $this->pdo (private $pdo) par l'instance PDO que l'on vient de crée
        Et on retourne $this->pdo (où ont a stocké l'instance de PDO)
    */
    private function getPDO(){
        if($this->pdo == null){
            $pdo = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_mdp);
            $this->pdo = $pdo;
        }

        return $this->pdo;
    }

    /*
        Explication de la fonction "query($requete)" :

        SI $args = pleins ALORS
            on effectue une requete préparée avec les arguments du tableau $args
        SINON
            on effectue une simple requete

    */
    public function query($requete, $args = array(null)){
        if(!empty($args)){
            $req = $this->getPDO()->prepare($requete);
            $req->execute($args);
        } else {
            $req = $this->getPDO()->query($requete);
        }
    
        return $req;
    }

}

II) Utilisé la class

On crée un fichier "index.php"
On ouvre PHP :
PHP:
<?php
Maintenant on appelle notre class :
PHP:
<?php

require 'Database.php';
On instancie la class :
PHP:
<?php

require 'Database.php';
$pdo = new Database('dbname');
On fait une requete pour testé :
PHP:
<?php

require 'Database.php';
$pdo = new Database('dbname');

$requete = $pdo->query('SELECT * from users WHERE pseudo = ? AND email = ?', ['Westiix', '[email protected]']);
$infosMembre = $requete->fetch();

var_dump($infosMembre);
Et voilà, on a un système assez "claire" pour se connecté à notre base de donnée & effectuer des requetes simple ou préparé

==================================

Tutoriel terminé, j'espère que sa vous aidera :)

PS: Vous pouvez charger la class dans un fichier "core.php", y effectuer la connexion à la base de donnée et faire un "require" de "core.php" sur les pages où vous avez besoin.

PS2: La class est ré-utilisable pour n'importe le quel de vos projets


 
Dernière édition:

Westiix

Fortnite Player || PHP & VB.NET
Premium
Inscription
5 Octobre 2011
Messages
2 219
Réactions
88
Points
12 753
une vidéo, ça aurait été aussi sympa :p
Je vais essayer de faire un tuto vidéo, j'espère que sa va le faire car moi et l'orale sa fait deux xD

Edit le 17/05/2016 à 00:43 :
Tutoriel vidéo disponible, j'ai fait comme je pouvais, c'est mon premier tuto vidéo (à l'orale) et sa se voit que je suis pas très à l'aise ^^'
 
Dernière édition:

Rivals

Ancien staff
Inscription
27 Août 2016
Messages
1 705
Réactions
895
Points
13 104
Désolé pour le UP, mais je voulais partager cette library qui est aussi très utile et simple d'utilisation : :)
 

Ruby.

Undefined
Inscription
25 Avril 2012
Messages
518
Réactions
118
Points
11 846
Salut, merci déjà. Mais ça aurait été bien de citer ta source en l’occurrence grafikart de sa vidéo qui date de 2015 sur la POO
 
Haut