Attention: les mysql_xx
fonctions sont obsolètes depuis php 5.5 et supprimées depuis php 7.0 (voir http://php.net/manual/intro.mysql.php ), utilisez des mysqli_xx
fonctions ou voyez la réponse ci-dessous de @Troelskn
Vous pouvez faire plusieurs appels à mysql_connect()
, mais si les paramètres sont les mêmes, vous devez passer true pour le $new_link
paramètre ' ' (quatrième), sinon la même connexion est réutilisée. Par exemple:
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);
Ensuite, pour interroger la base de données 1, passez le premier identifiant de lien:
mysql_query('select * from tablename', $dbh1);
et pour la base de données 2, passez la seconde:
mysql_query('select * from tablename', $dbh2);
Si vous ne passez pas d'identifiant de lien, la dernière connexion créée est utilisée (dans ce cas, celle représentée par $dbh2
) par exemple:
mysql_query('select * from tablename');
Autres options
Si l'utilisateur MySQL a accès aux deux bases de données et qu'elles sont sur le même hôte (c'est-à-dire que les deux bases de données sont accessibles à partir de la même connexion), vous pouvez:
- Gardez une connexion ouverte et appelez
mysql_select_db()
pour permuter si nécessaire. Je ne suis pas sûr que ce soit une solution propre et vous pourriez finir par interroger la mauvaise base de données.
- Spécifiez le nom de la base de données lorsque vous référencez des tables dans vos requêtes (par exemple
SELECT * FROM database2.tablename
). Cela sera probablement difficile à mettre en œuvre.
Veuillez également lire la réponse de troelskn car c'est une meilleure approche si vous êtes capable d'utiliser PDO plutôt que les anciennes extensions.
$dbh2
pour le second uniquement lorsque cela est nécessaire? Devoir modifier toutes les requêtes pour que cette approche fonctionne prendrait probablement des jours pour les trouver toutes ...db_query($query,$db='db1')
puis mettre à jour en masse toutes vos anciennes requêtes pourdb_query($query)
suivre une mise à jour personnalisée de vos requêtes non par défaut àdb_query($query,'db2')
If the link identifier is not specified, the last link opened by mysql_connect() is assumed.
Si vous utilisez PHP5 (et vous devriez, étant donné que PHP4 est obsolète), vous devriez utiliser PDO , car cela devient lentement le nouveau standard. Un avantage (très) important de PDO est qu'il prend en charge les paramètres liés, ce qui rend le code beaucoup plus sécurisé.
Vous vous connectez via PDO, comme ceci:
(Bien sûr, remplacez le nom de la base de données, le nom d'utilisateur et le mot de passe ci-dessus)
Vous pouvez ensuite interroger la base de données comme ceci:
Ou, si vous avez des variables:
Si vous avez besoin de plusieurs connexions ouvertes à la fois, vous pouvez simplement créer plusieurs instances de PDO:
la source
use DATABASENAME
, mais je ne vois pas l'intérêt?Je viens de simplifier ma vie:
j'espère que c'est utile ... bravo ...
la source
Au lieu de mysql_connect, utilisez mysqli_connect .
mysqli fournit une fonctionnalité pour connecter plusieurs bases de données à la fois.
la source
mysql_connect
Essayez le code ci-dessous:
Vous pouvez récupérer les données de la requête ci-dessus à partir des deux bases de données comme ci-dessous
la source
mysql_select_db
une seule fois - aussi, l'appeler deux fois sans rien d'autre au milieu est inutileC'est la solution la plus évidente que j'utilise, mais rappelez-vous simplement que si le nom d'utilisateur / mot de passe pour les deux bases de données est exactement le même dans le même hôte, cette solution utilisera toujours la première connexion. Alors ne soyez pas confus que cela ne fonctionne pas dans un tel cas. Ce que vous devez faire est de créer 2 utilisateurs différents pour les 2 bases de données et cela fonctionnera.
la source
À moins que vous n'ayez vraiment besoin d'avoir plus d'une instance d'un objet PDO en jeu, tenez compte de ce qui suit:
Remarquez l'absence de
dbname=
dans les arguments de construction.Lorsque vous vous connectez à MySQL via un terminal ou un autre outil, le nom de la base de données n'est pas nécessaire dès le départ. Vous pouvez basculer entre les bases de données en utilisant l'
USE dbname
instruction via laPDO::exec()
méthode.Bien sûr, vous voudrez peut-être envelopper cela dans une instruction catch try.
la source
Vous pourrez peut-être utiliser la syntaxe MySQLi, ce qui vous permettrait de mieux la gérer.
Définissez les connexions à la base de données, puis chaque fois que vous souhaitez interroger l'une des bases de données, spécifiez la bonne connexion.
Par exemple:
Ensuite, pour les interroger sur la même page, utilisez quelque chose comme:
Passer à MySQLi de cette manière vous aidera.
la source
Vous n'en avez pas vraiment besoin
select_db
. Vous pouvez envoyer une requête à deux bases de données en même temps. Tout d'abord, accordez une subvention àDB1
pour sélectionnerDB2
parGRANT select ON DB2.* TO DB1@localhost;
. Ensuite,FLUSH PRIVILEGES;
. Enfin, vous pouvez faire une `` requête sur plusieurs bases de données '' commeSELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2
etc. (n'oubliez pas que vous avez besoin d'un accès `` root '' pour utiliser la commande grant)la source
si vous utilisez mysqli et avez deux fichiers db_connection. comme le premier est
le deuxième est
Alors changez simplement le nom du paramètre pass dans mysqli comme DB1 et DB2. si vous passez le même paramètre dans mysqli, supposons que DB1 dans les deux fichiers, la deuxième base de données ne se connectera plus. Alors rappelez-vous que lorsque vous utilisez deux connexions ou plus, passez un nom de paramètre différent dans la fonction mysqli
la source
la source