Se connecter à 3 base de données en php

Fermé
tytyrael - 24 oct. 2011 à 20:41
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 27 oct. 2011 à 19:03
Bonjour, comment pourrais-je modifier mon code pour pouvoir faire des requêtes sur d'autre bases de données .

Mon code est dans un fichier nommé "sql.php" que j'inclue dans mon "header" , il ne me reste plus qu'à faire mes requêtes sur les pages voulu et ça marche super.

Le problème qui se pose a moi maintenant c'est que je dois utiliser 2 autres base de données et je ne sais pas trop comment adapté voir simplifier mon code.

J'ai tenter d'ajouter les lignes ci dessous pour prendre en compte mes base de données 2 et 3 :
mysql_select_db($db_table2, $connexion);
mysql_select_db($db_table3, $connexion);


Apparemment ce n'est pas suffisant , quelqu'un qui maitrise la chose pourrait-il m'apporter la solution ?

voici mon code qui fonctionne avec ma première base de données :

<? session_start(); ?>
<?
/* Fichier include SQL : fonctions SQL */
/* CONSTANTES ******************************************* */
$db_host = "AAAA";//host
$db_user = "BBBB";//Login SQL
$db_pass = "CCCC";//Mot de passe SQL
$db_table = "data1";//database
$db_table2 = "data2";//database 2
$db_table3 = "data3";//database 3
$ip = "xxxx"; // localhost 
$port = "yyyy"; // port utiliser par le Login Server
$port2 = "zzzz"; // port utiliser par le Game Server
/* ****************************************************** */
/* Procédure d'appel à la base de données */

$error = true;
$attempts = 1;
while ($error && ($attempts>0)) {
	$connexion = mysql_connect($db_host,$db_user,$db_pass);
	$error = (!$connexion || mysql_errno($connexion)!=0);
	$attempts--;
		echo mysql_error();
		}

if ($error) {
exit();
	}
	
	mysql_select_db($db_table, $connexion);

	
	if (@mysql_errno($mySQLServer)!=0) { 
		print("Erreur sur la base de données +" .mysql_error($connexion));
		exit();
	}
//	return $resultat;
//}
/* ****************************************************** */
//echo phpinfo();

function query($req) {
	global $connexion;
	$rub = mysql_query($req, $connexion);
	$arr = array();
	$i=0;
	
	while ($cal = mysql_fetch_array($rub)) {
		
		$arr[$i] = $cal;
		$i++;		
		
	}
	return $arr;	
}
?>

7 réponses

Bonjour,

http://php.net/manual/fr/function.mysql-select-db.php

Donc il faut à chaque fois que l'on veut faire une requête sur une base différente changer de base grâce à la fonction sus-nommée.
Pourquoi ne pas exporter les tables dans la même base, ça paraît si ce n'est plus cohérent plus simple.
Quel système de gestion de base de données(SGBD) requiert plusieurs bases?
0
Mon site est rattaché a un serveur de jeu en ligne sur lequel il m'est impossible de déplacer les bases de données , voilà pourquoi il me faut adapté mon code .
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 oct. 2011 à 11:44
il faut mettre ta procedure dans une fonction et passer en argument la database lors de l'appel de cette fct

/* ****************************************************** */
/* Procédure d'appel à la base de données */
function connexion_db($db){
$error = true;
$attempts = 1;
while ($error && ($attempts>0)) {
	$connexion = mysql_connect($db_host,$db_user,$db_pass);
	$error = (!$connexion || mysql_errno($connexion)!=0);
	$attempts--;
		echo mysql_error();
		}

if ($error) {
exit();
	}
	
	mysql_select_db($db_table, $connexion);

	
	if (@mysql_errno($mySQLServer)!=0) { 
		print("Erreur sur la base de données +" .mysql_error($connexion));
		exit();
	}
	return $connexion;
}
/* ****************************************************** */
//echo phpinfo();

function query($req,$db) {//lors de l'appel à cette fct tu lui passes $db_table 1  2  ou 3 
	//global $connexion;
        $connexion=connexion_db($db);
	$rub = mysql_query($req, $connexion);
.........
mysql_close();

}
0
Pourrais tu me donnée un exemple car la je ne vois pas comment ça peu fonctionner.

Je rappel que pour moi , j'ai juste a faire un include("sql.php");

et je balance directement mes requêtes dans la page comme par exemple dans ma page compte.php

include_once("sql.php");

$req0 = "SELECT email FROM mail WHERE email = '" . html($email) . "'";
$rub = mysql_query($req0, $connexion);
$nbr = mysql_num_rows($rub);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 25/10/2011 à 22:08
Le fichier sql.php
<?php 
/* Fichier include SQL : fonctions SQL */ 
/* CONSTANTES ******************************************* */ 
$db_host = "AAAA";//host 
$db_user = "BBBB";//Login SQL 
$db_pass = "CCCC";//Mot de passe SQL 
$db_table = "data1";//database 
$db_table2 = "data2";//database 2 
$db_table3 = "data3";//database 3 
$ip = "xxxx"; // localhost  
$port = "yyyy"; // port utiliser par le Login Server 

/* Procédure d'appel à la base de données */ 
function connexion_db($db){ 
 global $db_host; 
 global $db_user; 
 global $db_pass; 
 $error = true; 
 $attempts = 1; 
 while ($error && ($attempts>0)) { 
  $connexion = mysql_connect($db_host,$db_user,$db_pass); 
  $error = (!$connexion || mysql_errno($connexion)!=0); 
  $attempts--; 
   echo mysql_error(); 
   } 

 if ($error) { 
 exit(); 
  } 
   
 mysql_select_db($db_table, $connexion); 

   
 if (@mysql_errno($mySQLServer)!=0) {  
  print("Erreur sur la base de données +" .mysql_error($connexion)); 
  exit(); 
 } 
 return $connexion; 
} 
?> 

ta page qui utilises db_table:
<?php 
include_once("sql.php"); 
//appel fonction connexion à la db concernée 
$connexion = connexion_db($db_table); //pour les autres pages tu remplaces par db_table2 3 

$req0 = "SELECT email FROM mail WHERE email = '" . html($email) . "'"; 
$rub = mysql_query($req0, $connexion); 
$nbr = mysql_num_rows($rub); 

.....


mysql_close();
?>
0
le but est d'utiliser la page "sql.php" pour géré toute la connexion à la base de données et ainsi que je n'ai qu'a écrire la requête ..

Dans ta solution , on est obliger de spécifier la Base de donnée a chaque fois avant la requête .. moi j'aimerai savoir si on ne peut pas ouvrir l'accès au 3 bases de données dans cette page "sql.php" et que la requête puisse si retrouver peut importe la base de données qui est concerné.

Car avec ta solution , autant que je laisse mon code d'origine et que je mette un
mysql_select_db("$db_table2", $connexion);
mysql_select_db("$db_table3", $connexion);


la ou j'ai besoin d'accéder à ma base de données 2 et 3 .. sachant que la 1 est paramétrer par défaut dans la page "sql.php" et donc j'écris la requête directe sans préciser.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 oct. 2011 à 19:03
je n'avait pas compris ton pb, tu veux dans un même script interroger des bases différentes.

alors une solution:

dans ton sql.php:
<?php 
/* Fichier include SQL : fonctions SQL */ 
/* CONSTANTES ******************************************* */ 
$db_host = "AAAA";//host 
$db_user = "BBBB";//Login SQL 
$db_pass = "CCCC";//Mot de passe SQL 
$db_table = "data1";//database 
$db_table2 = "data2";//database 2 
$db_table3 = "data3";//database 3 
$ip = "xxxx"; // localhost  
$port = "yyyy"; // port utiliser par le Login Server 

/* Procédure d'appel à la base de données */ 

 $error = true; 
 $attempts = 1; 
 while ($error && ($attempts>0)) { 
  $connexion = mysql_connect($db_host,$db_user,$db_pass); 
  $error = (!$connexion || mysql_errno($connexion)!=0); 
  $attempts--; 
   echo mysql_error(); 
   } 

 if ($error) { 
 exit(); 
  } 
  ///// tu ne selectionnes pas la base 
 //mysql_select_db($db_table, $connexion); 
//
   
 if (@mysql_errno($mySQLServer)!=0) {  
  print("Erreur sur la base de données +" .mysql_error($connexion)); 
  exit(); 
 } 
 
?> 


et dans tes requettes tu mets par exemple:

<?php
include_once("sql.php");

$req0 = "SELECT email FROM ".$db_table.".mail WHERE email = '" . html($email) . "'"; //et la tu changes $db_table à chaque requette
$rub = mysql_query($req0, $connexion);
$nbr = mysql_num_rows($rub);

?>


c'est à dire que tu ne sélectionnes plus ta base dans sql.php mais tu spécifie le nom de la base sous la forme nom_base.nom_table dans ta requette
0