1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| <?php
class C_PDO
{
private static $instance = [];
private static function new_PDO($db_name)
{
// le fichier connexions.php contient les identifiants de connexion des bdd : $connexion1, $username1, $pass1, $connexion2, $username2, $pass2
require_once('connexions.php');
switch ($db_name)
{
case "db1" : $connexion = isset($connexion1)? $connexion1 : null;
$username = isset($username1)? $username1 : null;
$pass = isset($pass1)? $pass1 : null;
break;
case "db2" : $connexion = isset($connexion2)? $connexion2 : null;
$username = isset($username2)? $username2 : null;
$pass = isset($pass2)? $pass2 : null;
break;
default: $connexion = null;
}
try
{
if(!(isset($connexion,$username,$pass))) throw new Exception('"'.$db_name.'" identifiants de connexion incomplets.');
// Options de configuration PDO
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;// Important
self::$instance[$db_name] = new PDO($connexion, $username, $pass, $pdo_options);
}
catch (PDOException $e) // pour gérer les erreur pdo
{
// Mode debug
// exit($e->getMessage());
// Mode production
exit('Problème de connexion '.$db_name);
}
catch (Exception $e) // pour gérer les autres erreurs (provenant éventuellement ici du throw new Exception)
{
exit($e->getMessage());
}
}
public static function getC($db_name)
{
// Si l'instance de connexion à la base de donnees n'existe pas, creation et ajout à la liste des instances
if( !array_key_exists($db_name, self::$instance) )
{
self::new_PDO($db_name);
}
return self::$instance[$db_name];
}
}
var_dump(C_PDO::getC('db1'));
var_dump(C_PDO::getC('db2'));
var_dump(C_PDO::getC('db1'));
?> |