2008-10-24 8 views
18

Estoy tratando de conectarme a 2 bases de datos en la misma instancia de MySQL desde 1 script PHP.Cómo conectarme a 2 bases de datos al mismo tiempo en PHP

Por el momento, la única forma que he descubierto es conectarme a ambas bases de datos con un usuario diferente para cada una.

Estoy usando esto en una secuencia de comandos de migración en la que estoy tomando datos de la base de datos original e insertándolos en la nueva, por lo que estoy recorriendo grandes listas de resultados.

Conectando a 1 base de datos y luego tratando de iniciar una segunda conexión con el mismo usuario simplemente cambia la base de datos actual a la nueva.

¿Alguna otra idea?

+0

Si usa 2 controladores de conexión, definitivamente querrá asegurarse de cerrar ambas conexiones después de usarlos. - Arunabh Das –

+0

Pero PHP se desconectará de la base de datos cuando el script finalice http://php.net/manual/en/function.mysql-close.php –

Respuesta

3

se recomienda usar dos manejadores de conexión

$old = mysql_connect('old.database.com', 'user', 'pass); 
    mysql_select_db('old_db', $old); 


    $new = mysql_connect('new.database.com','user','pass); 
    mysql_select_db('new_db', $new) 

    // run select query on $old 
    // run matching insert query on $new 
+1

Eso solo funciona si ambas bases de datos están en servidores diferentes. –

8

Lucas es correcta. Supongo que ambas bases de datos están alojadas en el mismo host.

O bien, puede crear solo 1 conexión de db y seguir intercambiando las bases de datos según sea necesario. Aquí hay un pseudo código.

$db_conn = connect_db(host, user, pwd); 
mysql_select_db('existing_db', $db_conn); 
-- do selects and scrub data -- 
mysql_select_db('new_db', $db_conn); 
-- insert the required data -- 
13

Si su base de datos de usuario tiene acceso a ambas bases de datos y que están en el mismo servidor, puede utilizar una conexión y sólo tiene que especificar la base de datos que desea trabajar antes de que el nombre de la tabla. Ejemplo:

SELECT column 
FROM database.table 

Dependiendo de lo que tiene que hacer, es posible que pueda hacer un INSERT INTO y guardar un montón de tiempo de procesamiento.

INSERT INTO database1.table (column) 
SELECT database2.table.column 
FROM database2.table 
+0

Estaba intentando averiguar cómo funcionaba una antigua aplicación de php. Esto tiene sentido ahora. – zkent

3

Si es una opción, use PDO: puede tener tantas conexiones de bases de datos abiertas como desee.

Además, asumiendo que ejecuta las mismas consultas una y otra vez, puede usar declaraciones preparadas.

0

Usted puede utilizar fácilmente 2 bases de datos en el mismo tiempo que las siguientes códigos:

<?php 
    define('HOST', "YOURHOSTNAME"); 
    define('USER', "YOURHOSTNAME"); 
    define('PASS', "YOURHOSTNAME"); 
    define('DATABASE1', "NAMEOFDATABASE1"); 
    define('DATABASE2', "NAMEOFDATABASE2"); 

    $DATABASE1 = mysqli_connect(HOST, USER, PASS, DATABASE1); 
    $DATABASE2 = mysqli_connect(HOST, USER, PASS, DATABASE2); 
    if(!$DATABASE1){ 
     die("DATABASE1 CONNECTION ERROR: ".mysqli_connect_error()); 
    } 
    if(!$DATABASE2){ 
     die("DATABASE2 CONNECTION ERROR: ".mysqli_connect_error()); 
    } 


    $sql = "SELECT * FROM TABLE"; /* You can use your own query */ 

    $DATABASE1_QUERY = mysqli_query($DATABASE1, $sql); 
    $DATABASE2_QUERY = mysqli_query($DATABASE2, $sql); 

    $DATABASE1_RESULT = mysqli_fetch_assoc($DATABASE1_QUERY); 
    $DATABASE2_RESULT = mysqli_fetch_assoc($DATABASE2_QUERY); 

    /* SHOW YOUR RESULT HERE WHICH DATABASE YOU WANT FROM */ 
    echo $DATABASE1_RESULT['id']; 
    echo $DATABASE2_RESULT['id']; 


    /*After complete your all work don't forgot about close database connections*/ 
    mysqli_close($DATABASE1); 
    mysqli_close($DATABASE2); 
     ?> 
+1

Como una guía general, las variables en PHP no se deben escribir en mayúscula, pero '$ camelCased'. Las palabras en mayúsculas son más difíciles de leer. – Martin

+0

@Martin: según su elección, puede usar su propio estilo. Porque solo trato de dar una respuesta sobre esta pregunta con algunos ejemplos. –

-1

Primero conectar dos base de datos

$database1 = mysql_connect("localhost","root","password"); 
$database2 = mysql_connect("localhost","root","password"); 

Ahora seleccione la base

$database1_select = mysql_select_db("db_name_1") or die("Can't Connect To Database",$database1); 
$database_select = mysql_select_db("db_name_2") or die("Can't Connect To Database",$database2); 

Ahora bien, si queremos para ejecutar la consulta luego especifique el nombre de la base de datos al final como,

$select = mysql_query("SELECT * FROM table_name",$database1); 
+0

Esto no funciona. Debe pasar True como el 4 ° parámetro en mysql_connect, de lo contrario solo devolverá la conexión anterior. –

Cuestiones relacionadas