Se connecter à 3 base de données en php

tytyrael -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
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;	
}
?>
A voir également:

7 réponses

istaros
 
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
tytyrael
 
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   Statut Membre Dernière intervention   894
 
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
tytyrael
 
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   Statut Membre Dernière intervention   894
 
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
tytyrael
 
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   Statut Membre Dernière intervention   894
 
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