par
JulieDev » 14 mai 2012, 09:27
Bonjour,
eh bien voici ma classe singleton avec ma fonction close :
class singletonConnexionBD {
// Connexion definie par:
// identifiant connexion
public static $_id;
//serveur
private $_hostname;
// Login
private $_username;
// Password
private $_userpwd;
// Nom BD
private $_dbname;
//
private $_createBase;
//
private $_configDir;
// Instance static de Connexion
private static $_instanceConnexion;
// Setter
private function setId($id) {
if (!isset($id)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_id = $id;
}
}
private function setHostname($hostname) {
if (!isset($hostname)) { // test si la variable est initialisée
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_hostname = $hostname;
}
}
private function setUsername($username) {
if (!isset($username)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_username = $username;
}
}
private function setUserpwd($userpwd) {
if (!isset($userpwd)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_userpwd = $userpwd;
}
}
private function setDbname($dbname) {
if (!isset($dbname)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_dbname = $dbname;
}
}
private function setCreateBase($createBase) {
if (!isset($createBase)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_createBase = $createBase;
}
}
private function setConfigdir($configDir) {
if (!isset($configDir)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_configDir = $configDir;
}
}
// Ouverture de la connexion et sélection de la base
private function connectToDB($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
// Open a connection to a MySQL server.
$connection = mysql_connect($hostname, $username, $userpwd);
//echo'connexion ok';
if ($connection == FALSE) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
}
// Select the MySQL database.
$db = mysql_select_db($dbname, $connection);
if ($db == FALSE AND $createBase == TRUE) {
// create the database if needed when asked
$query = 'CREATE DATABASE ' . $dbname;
if (mysql_query($query, $connection) == FALSE) {
displayErrorAndExit('Impossible de cr�er la base de donn�e : ' . mysql_error());
} else {
// create all database tables
createDbTables($configDir);
$db = mysql_select_db($dbname, $connection);
}
} elseif ($db == FALSE and $createBase == FALSE) {
// return an error when the database does not exist if it's not asked to create it
displayErrorAndExit('Impossible de s�lectionner la base de donn�es : ' . mysql_error());
}
return $connection;
}
// Constructeur de la classe Connexion
private function __construct($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
//Methodes permettant l'acces en ecriture des variables
$this->setHostname($hostname);
$this->setUsername($username);
$this->setUserpwd($userpwd);
$this->setDbname($dbname);
$this->setCreateBase($createBase);
$this->setConfigdir($configDir);
//Tentative de connexion à la base
try {
self::$_id = $this->connectToDB($this->_hostname, $this->_username, $this->_userpwd, $this->_dbname, $this->_createBase, $this->_configDir);
} catch (Exception $e) {
$e->getMessage();
}
}
// Création d'une instance de connexion
public static function getInstanceConnexion($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
if (!isset(self::$_instanceConnexion)) {
$c = __CLASS__;
self::$_instanceConnexion = new $c($hostname, $username, $userpwd, $dbname, $createBase, $configDir);
}
return self::$_instanceConnexion;
}
public function getConnexionDatabase() {
return self::$_id;
}
//Destruction de l'instance de connexion
// public function __destruct() {
// if (isset(self::$_id) && !empty(self::$_id)) {
// mysql_close(self::$_id);
// }
// }
public static function close($id) {
if (isset($id) && !empty($id)) {
mysql_close(self::$_id);
}
}
public function __clone() {
trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR);
}
}
La fonction close est appelée dans un fichier fonctions générales :
function disconnectToDB($dataBase)
{
include_once 'singletonConnexionBD.php';
singletonConnexionBD::close($dataBase);
}
J'avais aussi préparé une fonction __destruct mais elle fait planter le script...
J'avais beaucoup d'appels à la fonction close et apparemment ça pose problème.
J'espère que je finirai par y arriver

Merci beaucoup en tout cas si vous pouvez m'éclairer sur ce qui ne va pas...
Bonjour,
eh bien voici ma classe singleton avec ma fonction close :
[php]class singletonConnexionBD {
// Connexion definie par:
// identifiant connexion
public static $_id;
//serveur
private $_hostname;
// Login
private $_username;
// Password
private $_userpwd;
// Nom BD
private $_dbname;
//
private $_createBase;
//
private $_configDir;
// Instance static de Connexion
private static $_instanceConnexion;
// Setter
private function setId($id) {
if (!isset($id)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_id = $id;
}
}
private function setHostname($hostname) {
if (!isset($hostname)) { // test si la variable est initialisée
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_hostname = $hostname;
}
}
private function setUsername($username) {
if (!isset($username)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_username = $username;
}
}
private function setUserpwd($userpwd) {
if (!isset($userpwd)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_userpwd = $userpwd;
}
}
private function setDbname($dbname) {
if (!isset($dbname)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_dbname = $dbname;
}
}
private function setCreateBase($createBase) {
if (!isset($createBase)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_createBase = $createBase;
}
}
private function setConfigdir($configDir) {
if (!isset($configDir)) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
} else {
$this->_configDir = $configDir;
}
}
// Ouverture de la connexion et sélection de la base
private function connectToDB($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
// Open a connection to a MySQL server.
$connection = mysql_connect($hostname, $username, $userpwd);
//echo'connexion ok';
if ($connection == FALSE) {
displayErrorAndExit('Impossible de se connecter au serveur MySQL : ' . mysql_error());
}
// Select the MySQL database.
$db = mysql_select_db($dbname, $connection);
if ($db == FALSE AND $createBase == TRUE) {
// create the database if needed when asked
$query = 'CREATE DATABASE ' . $dbname;
if (mysql_query($query, $connection) == FALSE) {
displayErrorAndExit('Impossible de cr�er la base de donn�e : ' . mysql_error());
} else {
// create all database tables
createDbTables($configDir);
$db = mysql_select_db($dbname, $connection);
}
} elseif ($db == FALSE and $createBase == FALSE) {
// return an error when the database does not exist if it's not asked to create it
displayErrorAndExit('Impossible de s�lectionner la base de donn�es : ' . mysql_error());
}
return $connection;
}
// Constructeur de la classe Connexion
private function __construct($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
//Methodes permettant l'acces en ecriture des variables
$this->setHostname($hostname);
$this->setUsername($username);
$this->setUserpwd($userpwd);
$this->setDbname($dbname);
$this->setCreateBase($createBase);
$this->setConfigdir($configDir);
//Tentative de connexion à la base
try {
self::$_id = $this->connectToDB($this->_hostname, $this->_username, $this->_userpwd, $this->_dbname, $this->_createBase, $this->_configDir);
} catch (Exception $e) {
$e->getMessage();
}
}
// Création d'une instance de connexion
public static function getInstanceConnexion($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
if (!isset(self::$_instanceConnexion)) {
$c = __CLASS__;
self::$_instanceConnexion = new $c($hostname, $username, $userpwd, $dbname, $createBase, $configDir);
}
return self::$_instanceConnexion;
}
public function getConnexionDatabase() {
return self::$_id;
}
//Destruction de l'instance de connexion
// public function __destruct() {
// if (isset(self::$_id) && !empty(self::$_id)) {
// mysql_close(self::$_id);
// }
// }
public static function close($id) {
if (isset($id) && !empty($id)) {
mysql_close(self::$_id);
}
}
public function __clone() {
trigger_error('Le clônage n\'est pas autorisé.', E_USER_ERROR);
}
}[/php]
La fonction close est appelée dans un fichier fonctions générales :
[php]function disconnectToDB($dataBase)
{
include_once 'singletonConnexionBD.php';
singletonConnexionBD::close($dataBase);
}
[/php]
J'avais aussi préparé une fonction __destruct mais elle fait planter le script...
J'avais beaucoup d'appels à la fonction close et apparemment ça pose problème.
J'espère que je finirai par y arriver ;-)
Merci beaucoup en tout cas si vous pouvez m'éclairer sur ce qui ne va pas...