Hola a todos :
Quiero tener abiertas dos conexiones a 2 BD distintas alojadas en el mismo servidor (misma contraseña y usuario) de forma que en mi codigo PHP pueda consultar en una y actualizar en base a unos parámetros a otra.
Mi problema es que no consigo mantener estas dos conexiones abiertas al mismo tiempo porque por lo visto no se puede al ser el mismo servidor, usuario y contraseña.
Os pongo el código :
$conn1['user'] = "admin";
$conn1['password'] = "admin";
$conn1['db'] = "tienda1";
$conn1['server'] = "localhost";
$conn1['type'] = "mysql";
$conn1['link'] = mysql_pconnect( $conn1['server'], $conn1['user'], $conn1['password'] ) or
die( 'Could not open connection to server' );
mysql_select_db( $conn1['db'], $conn1['link'] ) or
die( 'Imposible conectar con la base de datos '. $conn1['db'] );
$conn2['user'] = "admin";
$conn2['password'] = "admin";
$conn2['db'] = "tienda2";
$conn2['server'] = "localhost";
$conn2['type'] = "mysql";
$conn2['link'] = mysql_pconnect( $conn2['server'], $conn2['user'], $conn2['password'] ) or
die( 'Could not open connection to server' );
mysql_select_db( $conn2['db'], $conn2['link'] ) or
die( 'Imposible conectar con la base de datos '. $conn2['db'] );
$sQuery = "INSERT INTO producto() VALUES ()";
$result = mysql_query($sQuery, $conn1['link'] );
Pues bien, como resultado sucede que hace un INSERT en la tabla producto de la BD tienda2 en lugar de la tienda1. Luego el indicarle en el insert que la conexión es con $conn1['link'] no hace ni caso.
¿Alguien sabe que puede estar sucediendo?
Necesito dos conexiones abiertas al mismo tiempo porque cómo he dicho voy a consultar constantemente en una BD y agregando a otra. Si lo hiciese cerrando y abriendo conexiones creo que no sería óptimo.
¿Que opináis?
Muchas gracias.
solucionado!!!
Lo he solucionado indicando en el campo 'server' : localhost y en el otro 127.0.0.1
o.O, no creo que sea la mejor solución. Además tener 2 conexiones que son exactamente las mismas. Creo que deberías de trabajar con POO!
PD: Que pasaría si se necesitaran 3 tablas. 3 Conexion?... Pwn3d!
de hecho basta con seleccionar una base de datos distinta con la misma conexion no? xD
en mi caso solo necesito dos conexiones. Lleva razon en el caso que necesitara 3 conexiones a la vez abiertas.
Con POO no veo que ventajas conseguiría porque tendría de todas formas estas dos conexiones abiertas.
Gracias por los consejos.
Sería así, maso menos.
function handler($sDataBase){
$CNN['Usuario'] = 'root';
$CNN['Password'] = 'root';
$CNN['database'] = $sDataBase;
$CNN['servidor'] = 'localhost';
$CNN['Tipo'] = 'mysql';
$CNN['Conexion'] = mysql_connect( $CNN['servidor'], $CNN['Usuario'], $CNN['Password'] ) or
die( 'Could not open connection to server' );
mysql_select_db( $CNN['database'], $CNN['Conexion'] ) or die( 'Imposible conectar con la base de datos '. $conn1['db'] );
return $CNN['Conexion'];
}
Y lo usarías así...
$sResult = mysql_query($sQuery, handler('tienda1') );
$sResult = mysql_query($sQuery, handler('tienda2') );
Notas la diferencia?
la verdad es que se ahorra en código.
Desconocia la función 'handler'
Gracias
Esa función no existe. La cree YÓ! :rolleyes:
upsss perdon, ahora termino de entenderla.
Solo me queda una duda, cada vez que llame a la función me crea una conexión nueva o mira a ver si ya estaba abierta la de antes y la reutiliza?.
Lo digo porque en ese caso tendría que cerrarla antes y despues abrirla y no creo que fuera muy óptimo estar abriendo siempre conexiones, por ese motivo la idea de dejarla abierta hasta que desee cerrarla.
Gracias de nuevo. Utilizaré tu función !! :)
Bueno, cuando trabajaba en ASPX.NET, tenia una función que verificaba si la conexión estaba abierta o cerrada y de allí realizaba las acciones correspondientes con la conexión. Intenta crearla.
bueh... una conexion basta :)
INSERT INTO dba1.tabla SELECT * FROM db2.tabla
no es neceario ni que crees un script en php :xD
funcionaria en tablas identicas :P para usar solo ciertas columnas es cuestion de agregar un parentesis, las columnas y blablabla
exacto una conexion por servidor basta
lo demas es utilizar la base de datos nomas
bastaria si las tablas estuviesen dentro del mismo servidor de la BD. En mi caso son dos bases de datos ubicadas en distintos alojamientos fisicos.