Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: OssoH en 16 Julio 2010, 17:50 pm



Título: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 16 Julio 2010, 17:50 pm
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 :
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.




Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 16 Julio 2010, 18:09 pm
solucionado!!!

Lo he solucionado indicando en el campo 'server' : localhost y en el otro 127.0.0.1


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Shell Root en 16 Julio 2010, 21:03 pm
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!


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Nakp en 16 Julio 2010, 22:02 pm
de hecho basta con seleccionar una base de datos distinta con la misma conexion no? xD


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 17 Julio 2010, 19:33 pm
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.


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Shell Root en 18 Julio 2010, 19:13 pm
Sería así, maso menos.


Código
  1. function handler($sDataBase){
  2.  $CNN['Usuario'] = 'root';
  3.  $CNN['Password'] = 'root';
  4.  $CNN['database'] = $sDataBase;
  5.  $CNN['servidor'] = 'localhost';
  6.  $CNN['Tipo'] = 'mysql';
  7.  
  8.  $CNN['Conexion']  = mysql_connect( $CNN['servidor'], $CNN['Usuario'], $CNN['Password']  ) or
  9. die( 'Could not open connection to server' );
  10.  mysql_select_db( $CNN['database'], $CNN['Conexion'] ) or die( 'Imposible conectar con la base de datos '. $conn1['db'] );
  11.  
  12.  return $CNN['Conexion'];
  13. }


Y lo usarías así...
Código
  1. $sResult = mysql_query($sQuery, handler('tienda1') );
  2. $sResult = mysql_query($sQuery, handler('tienda2') );

Notas la diferencia?


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 20 Julio 2010, 12:11 pm
la verdad es que se ahorra en código.
Desconocia la función 'handler'
Gracias


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Shell Root en 20 Julio 2010, 20:30 pm
Esa función no existe. La cree YÓ!  :rolleyes:


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 20 Julio 2010, 22:21 pm
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 !! :)


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Shell Root en 20 Julio 2010, 22:45 pm
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.


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Nakp en 20 Julio 2010, 22:46 pm
bueh... una conexion basta :)

Código
  1. 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


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: Ari Slash en 20 Julio 2010, 23:26 pm
exacto una conexion por servidor basta
lo demas es utilizar la base de datos nomas


Título: Re: dos conexiones a tablas abiertas al mismo tiempo
Publicado por: OssoH en 21 Julio 2010, 14:08 pm
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.