Connexion base de données MySql

Connexion base de données : La connexion à une base de données MySQL en PHP peut se faire avec ces deux extensions :
- MySQLi
- PDO (PHP Data Objects)

MySQLi permet de communiquer uniquement avec les base de données MySQL.
PDO est plus performant. Il prend en charge d'autres SGBD tel que MySQL, PostgreSQL ou MariaDB par exemple, il est donc universel.
Avec l'interface PDO, on peut donc interroger n'importe quel système de gestion de base de données.

connexion base de données
Se connecter à une base de données

Nous allons voir dans un premier temps chaque partie séparément. Commencez par créez une base de données dans PhpMyadmin ayant comme nom tuto-pdo.
Créer ensuite un fichier connect.php dans Visual Studio Code.

Nous allons commencer par créer nos constantes d'environnement avec define() afin de récupérer les informations relatives à la base de données.


    //Constantes d'environnement (qui vont contenir les informations à la base de données) - Avec define on crée les constantes
    define("DBHOST", "localhost");
    define("DBUSER", "root");
    define("DBPASS", "");
    define("DBNAME", "tuto-pdo");

Nous avons également besoin d’un DSN (data source name : nom de la source de donnée) de connexion. C’est une chaîne de caractère qui va indiquer le chemin de la connexion.

    //sans les constantes pour bien voir le chemin
    //$dsn = "mysql:dbname=tuto-pdo;host:localhost;user:root;pass:";
    //avec les constantes et en concaténant 
    $dsn = "mysql:dbname=".DBNAME.";host:=".DBHOST;

Et enfin, nous allons essayer de nous connecter à la base de données avec l'interface PDO.

La connexion à une base de donnée n'étant pas assurée, on va utiliser le bloc try/catch :

    // On va essayer de se connecter à la base et si la connexion ne se fait pas, on va générer une erreur.
    try{
        //On instancie PDO
        $db = new PDO($dsn, DBUSER, DBPASS);

    }catch(PDOException $e){
        die("Erreur: ".$e->getMessage());
    }

On a donc essayé de se connecter à la base de donnée avec try et si la connexion ne se fait pas, on va générer une erreur avec un type d'exception particulière à PDO : PDOException.
Comme c'est une classe spécialisée de Exception, elle hérite de toutes les méthodes de Exception.
Dans l'exemple ci-dessus, si une erreur survient, on aura le message d'erreur qui s'affichera (à vous de tester en changeant les constantes).
PDO est un constructeur. On va créer une instance de PDO pour obtenir un objet PDO sur lequel nous pourrons travailler par la suite.

 

On va maintenant s'assurer que les données sont bien transférées. On va utiliser la requête sql "SET NAMES utf8" afin de s'assurer que les caractères spéciaux s'affichent bien.
On va donc demander d'exécuter la requête sql en UTF8 avec exec().


    try{
        $db = new PDO($dsn, DBUSER, DBPASS);


        //On s'assure d'envoyer les données en UTF8, ce qui permet que les accents s'affichent bien dans la base de données.
        $db->exec("SET NAMES utf8");



    }catch(PDOException $e){
        die("Erreur: ".$e->getMessage());
    }

Ci-dessous le fichier complet connect.php.

<?php


    //Constantes d'environnement (qui vont contenir les informations à la base de données) - Avec define on crée les constantes
    define("DBHOST", "localhost");
    define("DBUSER", "root");
    define("DBPASS", "");
    define("DBNAME", "tuto-pdo");


    //DSN de connexion : chemin de connexion
    $dsn = "mysql:dbname=".DBNAME.";host:=".DBHOST;


    // On va essayer de se connecter à la base
    try{
        //On instancie PDO
        $db = new PDO($dsn, DBUSER, DBPASS);


        //On s'assure d'envoyer les données en UTF8, ce qui permet que les accents s'affichent bien dans la base de données.
        $db->exec("SET NAMES utf8");


    }catch(PDOException $e){
        die("Erreur: ".$e->getMessage());
    }

Pour plus de sécurité, on va maintenant sortir les constantes d'environnement et les placer dans un autre fichier. On va utiliser require que nous avons vu dans les tutos PHP.
Créez un nouveau fichier que vous allez nommer par exemple db_config.php et insérez dans ce fichier vos constantes et le dsn de connexion.

<?php


    //Constantes d'environnement
    define("DBHOST", "localhost");
    define("DBUSER", "root");
    define("DBPASS", "");
    define("DBNAME", "tuto-pdo");


    //DSN de connexion
    $dsn = "mysql:dbname=".DBNAME.";host:=".DBHOST;

Ajoutez maintenant le require sur votre page connect.php et testez.

<?php

    require 'db_config.php';

    // On va essayer de se connecter à la base
    try{
        //On instancie PDO
        $db = new PDO($dsn, DBUSER, DBPASS);

        //On s'assure d'envoyer les données en UTF8
        $db->exec("SET NAMES utf8");


    }catch(PDOException $e){
        die("Erreur: ".$e->getMessage());
    }

 

Retour en haut