IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Connexion à deux bases de données [Archives] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut Connexion à deux bases de données
    Bonjour,
    j'aimerai pouvoir effectuer deux connexions a une base de donnée (elles sont différentes) dans un même script, et cela en paralèle (c'est à dire pas une après les autres).

    Malheuresement quand j'ouvre une seconde connexion elle semble écraser le première, avez vous une solution ? ((je tourne sous mysql).

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Fais voir ton code.

  3. #3
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Il s'agit d'un MOD pour phpBB que je développe donc j'utilise leur classe DBAL, voici l'instance de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class sql_db
    {
     
    	var $db_connect_id;
    	var $query_result;
    	var $row = array();
    	var $rowset = array();
    	var $num_queries = 0;
     
    	//
    	// Constructor
    	//
    	function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
    	{
     
    		$this->persistency = $persistency;
    		$this->user = $sqluser;
    		$this->password = $sqlpassword;
    		$this->server = $sqlserver;
    		$this->dbname = $database;
     
    		if($this->persistency)
    		{
    			$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
    		}
    		else
    		{
    			$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
    		}
    		if($this->db_connect_id)
    		{
    			if($database != "")
    			{
    				$this->dbname = $database;
    				$dbselect = @mysql_select_db($this->dbname);
    				if(!$dbselect)
    				{
    					@mysql_close($this->db_connect_id);
    					$this->db_connect_id = $dbselect;
    				}
    			}
    			return $this->db_connect_id;
    		}
    		else
    		{
    			return false;
    		}
    	}
    (...)
    }
    Mon code se résume a faire une nouvelle instance de la classe dans un nouvel objet si la connexion à la seconde base de donnée à été activée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function &annuaire_connexion(&$cfg_extern)
    {
    	global $db;
     
    	if (!$cfg_extern['annu_use_extern_db'])
    	{
    		return ($db);
    	}
    	else
    	{
    		$db_annu = new sql_db($cfg_extern['annu_extern_db_server'], $cfg_extern['annu_extern_db_login'], $cfg_extern['annu_extern_db_password'], $cfg_extern['annu_extern_db_name'], FALSE);
    		if(!$db_annu->db_connect_id)
    		{
    		   message_die(CRITICAL_ERROR, "Could not connect to the database");
    		}
    		return ($db_annu);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db_annu = annuaire_connexion($cfg_annu_extern);
    donc $db_annu prend soit la valeur de $db, qui est l'instance actuelle, si la double connexion n'est pas activée, soit la valeur du nouvel objet de connexion à la seconde base de donnée.

    Malheuresmeent il semble que l'ID de connexion crée écrase l'ancienne

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 417
    Points : 15 786
    Points
    15 786
    Par défaut
    déjà je te conseille de laisser tomber les "@" pour gérer tes erreurs

    revenons à ton problème :
    new_link
    Si un deuxième appel est fait à mysql_connect() avec les mêmes arguments, aucune nouvelle connexion ne sera établie, mais plutôt, l'identifiant de la connexion de la connexion déjà ouverte sera retourné. Le paramètre new_link modifie ce comportement et permet à mysql_connect() de toujours ouvrir une nouvelle connexion, même si mysql_connect() a été appelée avant avec les mêmes paramètres.

    PHP 4.2.0 Ajout du paramètre new_link.
    trouvé sur la page suivante suivante :
    http://php.net/mysql_connect

  5. #5
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par mathieu
    déjà je te conseille de laisser tomber les "@" pour gérer tes erreurs

    revenons à ton problème :
    new_link
    Si un deuxième appel est fait à mysql_connect() avec les mêmes arguments, aucune nouvelle connexion ne sera établie, mais plutôt, l'identifiant de la connexion de la connexion déjà ouverte sera retourné. Le paramètre new_link modifie ce comportement et permet à mysql_connect() de toujours ouvrir une nouvelle connexion, même si mysql_connect() a été appelée avant avec les mêmes paramètres.

    PHP 4.2.0 Ajout du paramètre new_link.
    trouvé sur la page suivante suivante :
    http://php.net/mysql_connect
    (pour les @ il s'agit du code de phpBB je n'y suis pour rien ^^)

    Merci pour l'information !! J'aurais du chercher sur php.net je sais pas pourquoi j'ai pas eu ce reflexe, tu es mon sauveur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Data] Connexion à deux bases de données
    Par Jack-Ob dans le forum Spring
    Réponses: 7
    Dernier message: 23/06/2009, 17h05
  2. [MySQL] Connexion à deux bases de données
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/04/2009, 12h23
  3. Connexion à deux bases de données
    Par nbinot dans le forum JDBC
    Réponses: 7
    Dernier message: 29/10/2008, 15h46
  4. [MySQL] Connexion à deux bases de données sur la même page !
    Par Mike91 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/06/2008, 10h27
  5. Réponses: 13
    Dernier message: 10/12/2005, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo