Page 1 sur 1

[Résolu]connexion à plusieurs bdd

Posté : 23 nov. 2010, 13:25
par Cypher_PHP
Bonjour

Je me heurte au problème de connexion multi bases
j'ai testé n'importe quelle et seule connexion : ca fonctionne

par contre, la connexion à deux bases ne fonctionne pas.

merci de votre aide.

Code : Tout sélectionner

// Lecture sur SIGARE (informix) //---------------------------------------------------------------------------------------------------- $dbConnSIGARE = new connexion("SIGARE"); if(isset($dbConnSIGARE)){ $dbConn = $dbConnSIGARE; $dbConn->ouvrir_connexion(); $ifx=" SELECT ind.numen AS indnni, ind.nom AS ainomu, ind.prenom AS aipren, ind.fonction, ind.mail AS mailpro, tpol.libelle AS pole, tdiv.libelle AS division, ind.tel2 AS tel FROM ind, tpol, tdiv WHERE ind.numen=\"".$_SESSION["indnni"]."\" AND ind.pole=tpol.nopole AND ind.division=tdiv.coddiv "; $result = $dbConn->requete($ifx); }else{ echo "echec SIGARE"; } // Lecture sur EPP (informix) //---------------------------------------------------------------------------------------------------- $dbConnEPP = new connexion("EPP"); if(isset($dbConnEPP)){ $dbConn = $dbConnEPP; $dbConn->ouvrir_connexion(); $ifx=" SELECT indnni, ainomu, aipren FROM ind WHERE ind.indnni=\"".$_SESSION["indnni"]."\""; $result = $dbConn->requete($ifx); }else{ echo "echec EPP"; }

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 13:46
par xTG
Pourquoi travailles-tu avec $dbConn et pas directement avec la variable précédemment créée ?

Sinon je ne vois pas de problème qui saute au yeux. Qu'obtiens-tu en erreur ? Qu'est ce qui ne fonctionne pas ? La connexion ou la requête ?

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 14:14
par Cypher_PHP
d'abord parce que le fichier dans laquelle la $dbconn contient des identifiants ne doit ni être ajouté ni être modifié
c'est pourquoi je crée des connexion avec des différentes requêtes ailleurs.

oh sorry, j'ai oublié de dire ce qui ne marchait pas.
il m'affiche en page blanche

- une seule connexion à une seule base: ok
- deux connexions à deux bases en même temps : non
- une requête sql : ok

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 14:32
par xTG
Et comment fonctionne ta class connexion ?
Héritage de PDO ? Ou une class basée sur mysql, mysqli, autre ?

En gros...
Gère-t-elle la gestion des erreurs ?

Car avec ce code là il est impossible de savoir ce qui ne va pas sans retour du sgbd...

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 14:43
par Cypher_PHP
voici le fichier (désolé ce qui est trop long))
<?php
class connexion {
		var $nom;
		var $login;
		var $pass;
		var $serveur;
		var $port;
		var $base;
		var $link;
		var $etat_bool; // etat de la connexion booleen//
		var $etat_mes; // etat de la connexion message //

		var $curseur; // tableau //
		var $res; // ressource //


function connexion($labase){ // --- constructeur de classe --- //
$this->nom=$labase;
switch($labase){
	
	case "SIGARE": // base sigare //
$this->login="******";
$this->pass="******";
$this->serveur="******";
$this->type="informix";
	break; 
	case "EPP": // base epp //
$this->login="******";
$this->pass="******";
$this->serveur="******";
$this->type="informix";
	break;
 case "PRIVE": // base epp prive //
$this->login="******";
$this->pass="******";
$this->serveur="******";
//$this->serveur="******";
$this->type="informix";
        break;
	case "AGORA": // base sigare //
$this->login="******";
$this->pass="******";
//$this->login="******";
//$this->pass="******";
$this->serveur="******";
$this->type="informix";
	break;

}
}
function ouvrir_connexion() {
switch($this->type){
	case mysql:
	$this->link= mysql_connect($this->serveur.":".$this->port,$this->login,$this->pass) or die ("Echec lors de la connexion à la BDD Mysql sur : ".$this->serveur);
	mysql_select_db($this->base,$this->link) or die ("Echec lors de la connexion à la Base : ".$this->base." ");
	break;
	case informix:
	$this->link=ifx_connect($this->serveur,$this->login,$this->pass) or die("Echec lors de la connexion à la BDD Informix : ".$this->nom);
	break;
	case postgres:
	if ($this->port=="") $this->port="5432";
	$this->link=pg_connect("host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ") or die("Echec lors de la connexion à la BDD Postgres <br> host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ");
	break;
	}
	return $this->link;
}
function ouvrir_connexion_p() {
switch($this->type){
        case mysql:
        $this->link= mysql_pconnect($this->serveur.":".$this->port,$this->login,$this->pass,1) or die ("Echec lors de la connexion à la BDD Mysql sur : ".$this->serveur);
        mysql_select_db($this->base,$this->link) or die ("Echec lors de la connexion à la Base : ".$this->base." ");
        break;
        case informix:
        $this->link=ifx_connect($this->serveur,$this->login,$this->pass) or die("Echec lors de la connexion à la BDD Informix : ".$this->nom);
        break;
        case postgres:
        if ($this->port=="") $this->port="5432";
        $this->link=pg_connect("host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ") or die("Echec lors de la connexion à la BDD Postgres <br> host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ");
        break;
        }
        return $this->link;
}

function ouvrir_connexion_plus() {
$this->etat_bool=false;
$this->etat_mes="<div id=\"con\"> pas de connexion avec ".$this->nom."</div>";

switch($this->type){
	case mysql:
	$this->link= mysql_connect($this->serveur,$this->login,$this->pass) or die ("Echec lors de la connexion à la BDD Mysql sur : ".$this->serveur);
	$this->link=mysql_select_db($this->base,$this->link) or die ("Echec lors de la connexion à la Base : ".$this->base." ");
	break;
	case informix:
	if($this->link=ifx_connect($this->serveur,$this->login,$this->pass) ){
	$this->etat_bool=true;
	$this->etat_mes=" la connexion est active avec : ".$this->serveur;
	}
	break;
	case postgres:
	if ($this->port=="") $this->port="5432";
	$this->link=pg_connect("host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ") or die("Echec lors de la connexion à la BDD Postgres <br> host=".$this->serveur." port=".$this->port." dbname=".$this->base. " user=".$this->login." password=".$this->pass." ");
	break;
	}
	return $this->link;
}
function libere_connexion($res){
switch($this->type){
	case mysql:
	$this->curseur[$res]=mysql_free_result($res);
	break;
	case informix:
	$this->curseur[$res]=ifx_free_result($res);
	break;
	case postgres:
	$this->curseur[$res]=pg_freeresult($res);
	break;
}
return $this->curseur[$res];
}
function libere_curseur($res){
#A utiliser de préférence
switch($this->type){
	case mysql:
	$this->curseur[$res]=mysql_free_result($res);
	break;
	case informix:
	$this->curseur[$res]=ifx_free_result($res);
	break;
	case postgres:
	$this->curseur[$res]=pg_freeresult($res);
	break;
}
return $this->curseur[$res];
}

function requete($req){
switch($this->type){
	case mysql:
	$this->curseur[$res]=mysql_query($req,$this->link)or die(" Erreur dans la requete : ".mysql_errno($this->link)." - ".mysql_error($this->link)." ");
	break;
	case informix:
	$this->curseur[$res]=ifx_query($req,$this->link)or die(" Erreur dans la requete : ".ifx_error($this->link)." - ".ifx_errormsg($this->link)." ");
	break;
	case postgres:
	$this->curseur[$res]=pg_exec($this->link,$req)or die(" Erreur dans la requete :  ".pg_errormessage($this->link)."<br> ".$req);
	break;
	}
return $this->curseur[$res];
}
 

function requete_link($req){
switch($this->type){
        case mysql:
        $this->curseur[$res]=mysql_query($req,$this->link)or die(" Erreur dans la requete : ".mysql_errno($this->link)." - ".mysql_error($this->link)." ");
        break;
        case informix:
        $this->curseur[$res]=ifx_query($req,$this->link)or die(" Erreur dans la requete : ".ifx_error($this->link)." - ".ifx_errormsg($this->link)." ");
        break;
        case postgres:
        $this->curseur[$res]=pg_exec($this->link,$req)or die(" Erreur dans la requete :  ".pg_errormessage($this->link)."<br> ".$req);
        break;
        }
return $this->curseur[$res];
}



function nombre_ligne($res){
switch($this->type){
	case mysql:
	$nb=mysql_num_rows($res);
	case postgres:
	$nb=pg_numrows($res);
	break;
        case informix:
        $nb=ifx_num_rows($res);
        break;
	}
return $nb; // nombre de ligne
}
 
function ligne_suivante($res){
switch($this->type){
	case mysql:
	$ligne=mysql_fetch_array($res);
	break;
	case informix:
	$ligne=ifx_fetch_row($res,"NEXT");
	break;
	case postgres:
	$ligne=pg_fetch_array($res);
	break;
}
return $ligne; 
}

function femer_connexion() {
switch($this->type){
        case mysql:
        $b=mysql_close();
        break;
        case informix:
        $b=ifx_close($this->link);
        break;
        case postgres:
        $b=pg_close($this->link);
        break;
}
return $b; // booleen
} 
 
function ferme_connexion() {
switch($this->type){
	case mysql:
	$b=mysql_close();
	break;
	case informix:
	$b=ifx_close($this->link);
	break;
	case postgres:
	$b=pg_close($this->link);
	break;
}
return $b; // booleen
}

function prepare_requete($req){
	switch($this->type){
		case informix:
			$res_id=ifx_prepare($req,$this->link);
                        if (!ifx_do($res_id))
                        {
                           $Text=" Erreur dans la requete : $req ";
                        }
                        ifx_free_result($res_id);
			break;
	}
	return $Text;
}
function  dernier_identifiant() {
switch($this->type){
	case mysql:
	$b=mysql_insert_id();
	break;
	case informix:

	break;
	case postgres:

	break;
}
return $b; // entier
}

}

?>

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 14:46
par stealth35
utlise [ php ] a la place de [ code ]

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 14:48
par Cypher_PHP
stealth35

oups
désolé
j'ai corrigé

Re: connexion à plusieurs bdd

Posté : 23 nov. 2010, 18:59
par xTG
Peut être pas ça qui corrigera quoi que ce soit mais je serai fortement tenté de mettre les valeurs des case entre quote.
Dans cet exemple cela n'est-il pas considéré comme des constantes et non des chaînes de caractères ?

Re: connexion à plusieurs bdd

Posté : 25 nov. 2010, 11:53
par Cypher_PHP
j'ai résolu

voici le code corrigé
$row=true;

// Lecture sur SIGARE (informix)
//----------------------------------------------------------------------------------------------------	
if(isset($_SESSION['indnni']))
{
	$dbConnSIGARE = new connexion("SIGARE");
	if(isset($dbConnSIGARE)){
		$dbConn = $dbConnSIGARE;
		$dbConn->ouvrir_connexion();
		$ifx=" SELECT ind.numen AS indnni, ind.nom AS ainomu, ind.prenom AS aipren, ind.fonction, ind.mail AS mailpro, tpol.libelle AS pole, tdiv.libelle AS division, ind.tel2 AS tel FROM ind, tpol, tdiv WHERE ind.numen=\"".$_SESSION["indnni"]."\" AND ind.pole=tpol.nopole AND ind.division=tdiv.coddiv ";
		$result = $dbConn->requete($ifx);
		$row = $dbConn->ligne_suivante($result);
		$baaa="SIGARE";
	}else{
	//echo "echec SIGARE";
	$conn='ko';
	}

if(empty($row)
{
// Lecture sur EPP (informix)
//----------------------------------------------------------------------------------------------------				
	$dbConnEPP = new connexion("EPP");
	if(isset($dbConnEPP)){
		$dbConn = $dbConnEPP;
		$dbConn->ouvrir_connexion();
		$ifx=" SELECT indnni, ainomu, aipren FROM ind WHERE ind.indnni=\"".$_SESSION["indnni"]."\"";
		$result = $dbConn->requete($ifx);
		$row = $dbConn->ligne_suivante($result);
		$baaa="EPP";
	}else{
	//echo "echec EPP";
	$conn='ko';
	}
}

if(empty($row))
{
// Lecture sur AGAPE93 (informix)
//----------------------------------------------------------------------------------------------------				
	$dbConnAGAPE93 = new connexion("AGAPE93");
	if(isset($dbConnAGAPE93)){
		$dbConn = $dbConnAGAPE93;
		$dbConn->ouvrir_connexion();
		$ifx=" SELECT indnni, ainomu, aipren FROM ind WHERE ind.indnni=\"".$_SESSION["indnni"]."\"";
		$result = $dbConn->requete($ifx);
		$row = $dbConn->ligne_suivante($result);
		$baaa="AGAPE93";
	}else{
	//echo "echec EPP";
	$conn='ko';
	}
}

if(empty($row))
{
// Lecture sur AGAPE94 (informix)
//----------------------------------------------------------------------------------------------------	
	$dbConnAGAPE94 = new connexion("AGAPE94");
	if(isset($dbConnAGAPE94)){
		$dbConn = $dbConnAGAPE94;
		$dbConn->ouvrir_connexion();
		$ifx=" SELECT indnni, ainomu, aipren FROM ind WHERE ind.indnni=\"".$_SESSION["indnni"]."\"";
		$result = $dbConn->requete($ifx);
		$row = $dbConn->ligne_suivante($result);
		$baaa="AGAPE94";	
	}else{
	//echo "echec EPP";
	$conn='ko';
	}
}
if(empty($row))
{
// Lecture sur AGAPE77 (informix)
//----------------------------------------------------------------------------------------------------	
		$dbConnAGAPE77 = new connexion("AGAPE77");
		if(isset($dbConnAGAPE77)){
			$dbConn = $dbConnAGAPE77;
			$dbConn->ouvrir_connexion();
			$ifx=" SELECT indnni, ainomu, aipren FROM ind WHERE ind.indnni=\"".$_SESSION["indnni"]."\"";
			$result = $dbConn->requete($ifx);
			$row = $dbConn->ligne_suivante($result);
			$baaa="AGAPE77";	
		}else{
		//echo "echec EPP";
		$conn='ko';
		}
}

}
else {
$error="message si pas de session";
}