Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Instance globale d'une connexion PDO

Cours / tutoriel écrit le 21-07-2010 par sky
Comment mettre en place et utiliser une instance globale PDO (singleton)

Utiliser une instance global pour une connexion à la base de donnée via PDO de PHP aussi appellé 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>';
    }
}
?>

Commentaires

CedricG le 24-07-2010

Je suppose que tu fais un singleton.
Dans ce cas, tu dois mettre aussi le constructeur et le mettre en privé comme le cloneur.

Pseudo
Email
Commentaire

Merci d'écrire le code ici :