Page 1 sur 1

Problème avec mysql_query après un singleton de connexion

Posté : 11 mai 2012, 11:28
par JulieDev
Bonjour,
je travaille actuellement sur un projet existant dans lequel je devais insérer un singleton pour la connexion à la base de donnée mysql.
Le problème c'est que de nombreuses fonctions mysql_query sont présentes dans le projet et qu'elles ont 2 paramètres :
$result = mysql_query($query, $dataBase);

Avant l'insertion du singleton $dataBase était défini ainsi :
$dataBase=mysql_connect($hostname, $username, $userpwd);

mais maintenant :
$dataBase=singletonConnexionBD::getInstanceConnexion($hostname, $username, $userpwd);

Le parametre n'est plus valide et l'erreur renvoyée est :
mysql_query() expects parameter 2 to be resource, object given in...

Je voudrais rester au plus près du projet initial mais je n'arrive vraiment pas à trouver de solution...
Pourriez-vous m'aider ?
Merci,
Julie

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 11:30
par xTG
Ta fonction getInstanceConnexion() ne doit pas renvoyer son instance d'objet, mais son instance de connexion, à savoir le retour de mysql_connect(). :)

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 11:49
par JulieDev
Merci !
Je comprends mon erreur maintenant effectivement...
En fait la connexion est faite dans une première fonction connectToDB.
Elle est appelée par le constructeur.
Et c'est dans le getInstanceConnexion que ça ne va plus...
Mais sans instance de classe je ne vois plus comment réorganiser le tout j'avoue...
Il faudrait que je fusionne mes fonctions connectToDB à getInstanceConnexion ?
private function connectToDB($hostname, $username, $userpwd, $dbname, $createBase = FALSE, $configDir="") {
// Open a connection to a MySQL server.
$connection = mysql_connect($hostname, $username, $userpwd);
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) {
$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) {
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;
}

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 11:51
par JulieDev
D'ailleurs mes noms de fonctions traduisent ma confusion entre instance d'objet et de connexion... Désolée

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 11:58
par xTG
Donc soit tu modifies le retour de ton getInstance() pour qu'il retourne l'instance de connexion et non de l'objet.
Soit tu en as l'utilité et tu te fais une seconde fonction qui retourne l'instance de connexion.
$dataBase=singletonConnexionBD::getInstanceConnexion($hostname, $username, $userpwd)->getConnexionDatabase();

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 12:01
par Mazarini
Si ta fonction retournait self::$_id, ca devrait marcher puisque c'est cette zone que contient le résultat de la connexion.

Re: Problème avec mysql_query après un singleton de connexio

Posté : 11 mai 2012, 14:23
par JulieDev
Merci beaucoup à vous deux !
Il me reste quelques réglages à faire mais c'est nettement mieux !!!