lundi 1 avril 2013

Instance globale d'une connexion PDO

Utiliser une instance global pour une connexion à la base de donnée via PDO de PHP aussi appelé singleton.

Dans cette classe, les informations de connexions à la base de donnée sont passés par des constantes que l'on considère défini au préalable.

Voici la classe en elle même :

<?php
class DB
{
    private static $instance = NULL;

    public static function getInstance() {

        if (!self::$instance) {
            self::$instance = new PDO("mysql:host=".DB_HOST.";dbname=".DB_DATABASE, DB_USERNAME, DB_PASSWORD);
            self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        return self::$instance;
    }

    private function __clone() {
        /* interdiction de cloner l'instance */
    }

}
?>

Exemple d'utilisation :
<?php
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'Basededonnee');
define('DB_USERNAME', 'Utilisateur');
define('DB_PASSWORD', 'Motdepasse');

include('./DB.class.php');

$DB = DB::getInstance();

foreach ($DB->query("SELECT id,nom FROM Users") as $row)
{
    echo '<p>'.$row['nom'].'</p>';
}
?>

On peux aussi utiliser cette class dans une fonction :
[/code]
Exemple d'utilisation :
<?php
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'Basededonnee');
define('DB_USERNAME', 'Utilisateur');
define('DB_PASSWORD', 'Motdepasse');

include('./DB.class.php');

function getUsers()
{
    $DB = DB::getInstance();

    foreach ($DB->query("SELECT id,nom FROM Users") as $row)
    {
        echo '<p>'.$row['nom'].'</p>';
    }
}
?>

Ou encore faire les deux.
Dans ce cas de figure, une seul connexion à MySQL est effectué.
<?php
define('DB_HOST', 'localhost');
define('DB_DATABASE', 'Basededonnee');
define('DB_USERNAME', 'Utilisateur');
define('DB_PASSWORD', 'Motdepasse');

include('./DB.class.php');


$DB = DB::getInstance();
$DB->exec("INSERT INTO Users SET nom='sky'");

function getUsers()
{
    $DB = DB::getInstance();

    foreach ($DB->query("SELECT id,nom FROM Users") as $row)
    {
        echo '<p>'.$row['nom'].'</p>';
    }
}
?>

Aucun commentaire:

Enregistrer un commentaire