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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec mysql_query après un singleton de connexion

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

par JulieDev » 11 mai 2012, 14:23

Merci beaucoup à vous deux !
Il me reste quelques réglages à faire mais c'est nettement mieux !!!

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

par Mazarini » 11 mai 2012, 12:01

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

par xTG » 11 mai 2012, 11:58

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

par JulieDev » 11 mai 2012, 11:51

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

par JulieDev » 11 mai 2012, 11:49

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

par xTG » 11 mai 2012, 11:30

Ta fonction getInstanceConnexion() ne doit pas renvoyer son instance d'objet, mais son instance de connexion, à savoir le retour de mysql_connect(). :)

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

par JulieDev » 11 mai 2012, 11:28

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