una paso pagina formulario ejemplo datos crear conexion conectar con como archivo php mysql

paso - conexion a base de datos php mysqli



¿Cómo se conecta a múltiples bases de datos MySQL en una sola página web? (11)

Tengo información distribuida en unas pocas bases de datos y quiero poner toda la información en una página web usando PHP. Me preguntaba cómo puedo conectarme a múltiples bases de datos en una sola página web de PHP.

Sé cómo conectarme a una única base de datos usando:

$dbh = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");

Sin embargo, ¿puedo simplemente usar múltiples comandos "mysql_connect" para abrir las otras bases de datos, y cómo PHP sabrá de qué base de datos quiero extraer la información si tengo varias bases de datos conectadas?


A menos que realmente necesite tener más de una instancia de un objeto PDO en juego, considere lo siguiente:

$con = new PDO(''mysql:host=localhost'', $username, $password, array(PDO::ATTR_PERSISTENT => true));

Observe 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 alternar entre bases de datos utilizando la declaración USE dbname través del método PDO::exec() .

$con->exec("USE someDatabase"); $con->exec("USE anotherDatabase");

Por supuesto, es posible que desee envolver esto en una declaración catch-try.


En lugar de mysql_connect utiliza mysqli_connect .

mysqli proporciona una funcionalidad para conectar múltiples bases de datos a la vez.

$Db1 = new mysqli($hostname,$username,$password,$db_name1); // this is connection 1 for DB 1 $Db2 = new mysqli($hostname,$username,$password,$db_name2); // this is connection 2 for DB 2


Es posible que pueda utilizar la sintaxis de MySQLi, lo que le permitiría manejarlo mejor.

Defina las conexiones de la base de datos, luego cuando quiera consultar una de las bases de datos, especifique la conexión correcta.

P.ej:

$Db1 = new mysqli(''$DB_HOST'',''USERNAME'',''PASSWORD''); // 1st database connection $Db2 = new mysqli(''$DB_HOST'',''USERNAME'',''PASSWORD''); // 2nd database connection

Luego, para consultarlos en la misma página, use algo como:

$query = $Db1->query("select * from tablename") $query2 = $Db2->query("select * from tablename") die("$Db1->error");

Cambiar a MySQLi de esta manera te ayudará.


Pruebe el siguiente código:

$conn = mysql_connect("hostname","username","password"); mysql_select_db("db1",$conn); mysql_select_db("db2",$conn); $query1 = "SELECT * FROM db1.table"; $query2 = "SELECT * FROM db2.table";

Puede buscar datos de la consulta anterior desde ambas bases de datos como se muestra a continuación

$rs = mysql_query($query1); while($row = mysql_fetch_assoc($rs)) { $data1[] = $row; } $rs = mysql_query($query2); while($row = mysql_fetch_assoc($rs)) { $data2[] = $row; } print_r($data1); print_r($data2);


Puede realizar varias llamadas a mysql_connect() , pero si los parámetros son los mismos, debe pasar true para el parámetro '' $new_link '' (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 pasa 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 ), por 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, ambos DB son accesibles desde la misma conexión), usted podría:

  • Mantenga una conexión abierta y llame a 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 sea un dolor implementarlo.

También lea la respuesta de troelskn porque es un mejor enfoque si puede usar PDO en lugar de las extensiones anteriores.


Realmente no necesitas select_db . Puede enviar una consulta a dos bases de datos al mismo tiempo. Primero, otorgue una concesión a DB1 para seleccionar de DB2 mediante GRANT select ON DB2.* TO DB1@localhost; . Luego, FLUSH PRIVILEGES; . Finalmente, puede hacer ''consultas de bases de datos múltiples'' como SELECT DB1.TABLE1.id, DB2.TABLE1.username FROM DB1,DB2 etc. (No olvide que necesita acceso ''root'' para usar el comando grant)


Si usa PHP5 (y debe hacerlo, 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 vinculados, lo que hace que el código sea mucho más seguro.

Te conectarías a través de PDO, así:

try { $db = new PDO(''mysql:dbname=databasename;host=127.0.0.1'', ''username'', ''password''); } catch (PDOException $ex) { echo ''Connection failed: '' . $ex->getMessage(); }

(Por supuesto, reemplace databasename, username y password arriba)

A continuación, puede consultar la base de datos de esta manera:

$result = $db->query("select * from tablename"); foreach ($result as $row) { echo $row[''foo''] . "/n"; }

O, si tiene variables:

$stmt = $db->prepare("select * from tablename where id = :id"); $stmt->execute(array('':id'' => 42)); $row = $stmt->fetch();

Si necesita varias conexiones abiertas a la vez, puede simplemente crear varias instancias de PDO:

try { $db1 = new PDO(''mysql:dbname=databas1;host=127.0.0.1'', ''username'', ''password''); $db2 = new PDO(''mysql:dbname=databas2;host=127.0.0.1'', ''username'', ''password''); } catch (PDOException $ex) { echo ''Connection failed: '' . $ex->getMessage(); }


Simplemente hice mi vida simple:

CREATE VIEW another_table AS SELECT * FROM another_database.another_table;

Espero que sea útil ... aplausos ...


También es posible que desee echar un vistazo a una de las muchas herramientas de abstracción de bases de datos. Sin embargo, generalmente harán lo mismo que Tom describió para mantener abiertas varias conexiones al mismo tiempo.


si está utilizando mysqli y tiene dos archivos db_connection. como el primero es

define(''HOST'',''localhost''); define(''USER'',''user''); define(''PASS'',''passs''); define(''**DB1**'',''database_name1''); $connMitra = new mysqli(HOST, USER, PASS, **DB1**);

el segundo es

define(''HOST'',''localhost''); define(''USER'',''user''); define(''PASS'',''passs''); define(**''DB2**'',''database_name1''); $connMitra = new mysqli(HOST, USER, PASS, **DB2**);

ASÍ, simplemente cambie el nombre del parámetro pase en mysqli como DB1 y DB2. si pasa el mismo parámetro en mysqli suponga DB1 en ambos archivos, entonces la segunda base de datos no se conectará más. Así que recuerde cuando use dos o más conexiones pase diferentes nombres de parámetros en la función mysqli


$dbh1 = mysql_connect($hostname, $username, $password); $dbh2 = mysql_connect($hostname, $username, $password, true); mysql_select_db(''database1'', $dbh1); mysql_select_db(''database2'',$dbh2); mysql_query(''select * from tablename'', $dbh1); mysql_query(''select * from tablename'', $dbh2);

Esta es la solución más obvia que uso, pero recuerde, si el nombre de usuario / contraseña de la base de datos es exactamente el mismo en el mismo host, esta solución siempre utilizará la primera conexión. Así que no te confundas porque esto no está funcionando en tal caso. Lo que debe hacer es crear 2 usuarios diferentes para las 2 bases de datos y funcionará.