Instance globale d'une connexion PDO
accueil >
Cours >
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.