Advertencia: las mysql_xx
funciones están en desuso desde php 5.5 y se eliminan desde php 7.0 (consulte http://php.net/manual/intro.mysql.php ), use mysqli_xx
funciones o vea la respuesta a continuación de @Troelskn
Puede realizar varias llamadas a mysql_connect()
, pero si los parámetros son los mismos, debe pasar true para el '$new_link
parámetro ' (cuarto), de lo contrario, se reutilizará la misma conexión. Por ejemplo:
$dbh1 = mysql_connect($hostname, $username, $password);
$dbh2 = mysql_connect($hostname, $username, $password, true);
mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);
Luego, para consultar la base de datos 1, pase el primer identificador de enlace:
mysql_query('select * from tablename', $dbh1);
y para la base de datos 2 pase el segundo:
mysql_query('select * from tablename', $dbh2);
Si no pasa un identificador de enlace, se utiliza la última conexión creada (en este caso, la representada por $dbh2
), ejemplo:
mysql_query('select * from tablename');
Otras opciones
Si el usuario de MySQL tiene acceso a ambas bases de datos y están en el mismo host (es decir, se puede acceder a ambos DB desde la misma conexión), usted podría:
- Mantenga una conexión abierta y llame
mysql_select_db()
para intercambiar según sea necesario. No estoy seguro de que esta sea una solución limpia y podría terminar consultando la base de datos incorrecta.
- Especifique el nombre de la base de datos cuando haga referencia a tablas dentro de sus consultas (por ejemplo
SELECT * FROM database2.tablename
). Es probable que esto sea difícil de implementar.
También lea la respuesta de troelskn porque es un mejor enfoque si puede usar PDO en lugar de las extensiones más antiguas.
$dbh2
para el segundo solo cuando sea necesario? Tener que cambiar todas las consultas para que este enfoque funcione probablemente lleve días encontrarlas todas ...db_query($query,$db='db1')
y luego actualizar en masa todas sus consultas anteriores paradb_query($query)
luego actualizarlas de manera personalizada a lasdb_query($query,'db2')
If the link identifier is not specified, the last link opened by mysql_connect() is assumed.
Si usa PHP5 (y debería, dado que PHP4 ha quedado en desuso), debe usar PDO , ya que esto se está convirtiendo lentamente en el nuevo estándar. Un beneficio (muy) importante de PDO es que admite parámetros enlazados, lo que hace que el código sea mucho más seguro.
Te conectarías a través de PDO, así:
(Por supuesto, reemplace databasename, nombre de usuario y contraseña arriba)
Luego puede consultar la base de datos de esta manera:
O, si tiene variables:
Si necesita múltiples conexiones abiertas a la vez, simplemente puede crear múltiples instancias de PDO:
fuente
use DATABASENAME
, pero no veo el punto.Acabo de hacer mi vida simple:
Espero que sea útil ... saludos ...
fuente
En lugar de mysql_connect, use mysqli_connect .
mysqli proporciona una funcionalidad para conectar múltiples bases de datos a la vez.
fuente
mysql_connect
Pruebe el siguiente código:
Puede obtener datos de la consulta anterior de ambas bases de datos como se muestra a continuación
fuente
mysql_select_db
ni una sola vez; también, llamar dos veces sin nada más en el medio es inútilEsta es la solución más obvia que uso, pero solo recuerde, si el nombre de usuario / contraseña para ambas bases de datos es exactamente el mismo en el mismo host, esta solución siempre usará la primera conexión. Así que no se confunda que esto no está funcionando en tal caso. Lo que debe hacer es crear 2 usuarios diferentes para las 2 bases de datos y funcionará.
fuente
A menos que realmente necesite tener más de una instancia de un objeto PDO en juego, considere lo siguiente:
Note la ausencia de
dbname=
en los argumentos de construcción.Cuando se conecta a MySQL a través de un terminal u otra herramienta, el nombre de la base de datos no es necesario de inmediato. Puede cambiar entre bases de datos mediante el uso de la
USE dbname
declaración a través delPDO::exec()
método.Por supuesto, es posible que desee envolver esto en una declaración catch try.
fuente
Es posible que pueda usar la sintaxis de MySQLi, lo que le permitiría manejarlo mejor.
Defina las conexiones de la base de datos, luego, cada vez que desee consultar una de las bases de datos, especifique la conexión correcta.
P.ej:
Luego, para consultarlos en la misma página, use algo como:
Cambiar a MySQLi de esta manera lo ayudará.
fuente
En realidad no lo necesitas
select_db
. Puede enviar una consulta a dos bases de datos al mismo tiempo. Primero, otorgue una subvenciónDB1
para seleccionarDB2
porGRANT select ON DB2.* TO DB1@localhost;
. A continuación,FLUSH PRIVILEGES;
. Finalmente, puede hacer una 'consulta de base de datos múltiple' comoSELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2
etc. (No olvide que necesita acceso 'root' para usar el comando de concesión)fuente
si está utilizando mysqli y tiene dos archivos db_connection. como el primero es
el segundo es
SO simplemente cambia el nombre del paso de parámetros en mysqli como DB1 y DB2. si pasa el mismo parámetro en mysqli, suponga que DB1 en ambos archivos, la segunda base de datos ya no se conectará. Así que recuerde cuando use dos o más conexiones, pase un nombre de parámetro diferente en la función mysqli
fuente
fuente