2011-07-01 11 views
2

J'utilise sphinx pour une recherche de site et cela fonctionne très bien mais maintenant j'essaye de me connecter à 2 bases de données mysql avec la même structure exacte et db2 est une continuation de db1 ainsi toutes les informations devraient circuler facilement. Je peux facilement obtenir les résultats en changeant le nom de DB dans le code, mais comment puis-je sélectionner les deux à la fois?connexion à plusieurs bases de données

ici est un code im en utilisant

$CONF['sphinx_host'] = 'localhost'; 
$CONF['sphinx_port'] = 9312; 
$CONF['mysql_host'] = "localhost"; 
$CONF['mysql_username'] = "user"; 
$CONF['mysql_password'] = "password"; 
$CONF['mysql_database'] = "db1"; 
$CONF['sphinx_index'] = "index index2"; 


$db = mysql_connect($CONF['mysql_host'],$CONF['mysql_username'],$CONF['mysql_password']) or die("ERROR: unable to connect to database"); 
mysql_select_db($CONF['mysql_database'], $db) or die("ERROR: unable to select database"); 


$sql = str_replace('$ids',implode(',',$ids),$CONF['mysql_query']); 
$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later"); 

Ce code fonctionne bien si j'entre un base de données mysql dans $CONF['mysql_database'] = "db1"; mais je dois choisir parmi db1 et db2. Est-ce que quelqu'un sait comment je peux y parvenir? Aussi, je n'ai pas posté la requête parce que je ne pense pas que ce soit très utile c'est juste une simple requête de sélection et je suis sûr que vous avez l'idée.

Répondre

2

Si les bases de données sont hébergées sur le même serveur, vous pouvez en choisir un arbitrairement dans mysql_select_db() puis qualifier tous les noms de tables dans vos requêtes SQL avec un préfixe databasename.. Vous pouvez même mélanger et faire correspondre les tables des deux bases de données dans une même requête. par exemple.

select h.lastname, h.firstname, p.petname 
    from db1.humans as h 
    left outer join db2.pets as p on p.human_id = h.id; 

Si vous n'avez pas besoin d'écrire des requêtes qui impliquent à la fois les bases de données, vous pouvez simplement appeler mysql_select_db() chaque fois que vous avez besoin de changer les bases de données.

Si les bases de données sont hébergées sur des serveurs différents, vous aurez besoin de 2 appels distincts à mysql_connect(). Dans ce cas, assurez-vous de passer le paramètre optionnel $link à toutes les fonctionsmysql_ car le comportement par défaut consiste simplement à utiliser la connexion la plus récente, ce qui peut conduire à toutes sortes de bogues. Étant donné que chaque base de données aura une connexion distincte, vous ne pourrez pas exécuter des requêtes individuelles accédant aux deux bases de données.

+0

ils sont sur le même serveur. Je vais essayer ce que vous avez dit avec le préfixe et rendre compte. Merci. – chris

+0

Je l'ai compris à peu près maintenant. Ce sera bien ici bientôt, j'en suis sûr. Je vous remercie. – chris

Questions connexes