Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Codigo para implementar consulta a dos bases de datos distintas

Estas en el tema de Codigo para implementar consulta a dos bases de datos distintas en el foro de PHP en Foros del Web. Buenas a todos. Estoy creando una intranet en PHP para acceder a los datos de nuestro ERP que estan en SQLSERVER. Todo funciona OK, pero ...
  #1 (permalink)  
Antiguo 27/11/2015, 08:24
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Codigo para implementar consulta a dos bases de datos distintas

Buenas a todos.

Estoy creando una intranet en PHP para acceder a los datos de nuestro ERP que estan en SQLSERVER. Todo funciona OK, pero el problema lo tengo ahora con un nuevo proceso. Tengo que actualizar los datos de una tabla con los datos de otra tabla, pero de distintas bases de datos.

Siguiendo algunas guía que he encontrado, he definido

$bd1=mssql_connect('localhost','usuario','pass');
mssql_select_db('base1',$bd1);
$bd2=mssql_connect('localhost','usuario','pass');
mssql_select_db('base2',$bd2);

cual seria la sintaxis correcta para que en un unico query pueda consultar datos de las dos tablas de bases de datos diferentes?
  #2 (permalink)  
Antiguo 27/11/2015, 08:36
 
Fecha de Ingreso: octubre-2015
Ubicación: ciudad juarez
Mensajes: 90
Antigüedad: 8 años, 7 meses
Puntos: 1
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

yo pienso que seria algo asi por separado

Código PHP:
Ver original
  1. $bd1=mssql_connect('localhost','usuario','pass');
  2. mssql_select_db('base1',$bd1);
  3. $query=mysql_query ("SELECT * FROM campo WHERE condicion";
  4. $row = mysql_fetch_array($query)
  5.  
  6.  
  7. $bd2=mssql_connect('localhost','usuario','pass');
  8. mssql_select_db('base2',$bd2);
  9. $query2=mysql_query ("SELECT * FROM campo WHERE condicion";
  10. $row2 = mysql_fetch_array($query2)
  #3 (permalink)  
Antiguo 30/11/2015, 02:19
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Buenos días.

Gracias por tu aportación, pero lo que yo busco es realizar un único query de las dos bases de datos ...

El privilegios de acceso del usuario son los mismos en ambas bases de datos.

¿alguna idea?
  #4 (permalink)  
Antiguo 30/11/2015, 04:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Si las dos bases están en el mismo servidor, es posible usar una sola consulta para eso. Si los servidores son diferentes, hay que verificar si se pueden comunicar. De lo contrario sólo podrás hacerlo como te dicen, con dos conexiones diferentes en el mismo script.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 30/11/2015, 04:13
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Os muestro a continuación el codigo que estoy utilizando y que no me funciona.

$server = 'SERVIDOR\SQLEXPRESS';
$link = mssql_connect($server, 'usuario', 'password');
if (!$link) {
die('Algo fue mal mientras se conectaba a MSSQL');
}
mssql_select_db('bd1', $link);

$link2 = mssql_connect($server, 'usuario', 'password',true);
if (!$link2) {
die('Algo fue mal mientras se conectaba a MSSQL');
}
mssql_select_db('db2', $link2);

$query = "select codigo, nombre, precio" ;
$query .= "from bd1.articulo left join bd2.precios on articulo.codigo = precios.articulo ";

Las dos tablas están en bases de datos diferentes. No soy capaz de que me funcione !!!!
  #6 (permalink)  
Antiguo 30/11/2015, 04:15
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Por cierto, las dos bases de datos estan en el mismo servidor.
  #7 (permalink)  
Antiguo 30/11/2015, 04:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Decir "no me funciona" no es información útil ni suficiente.
¿Qué no te funciona? ¿Devuelve errores?

Verificaste lo que te sugiero?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 30/11/2015, 04:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Cita:
Iniciado por osbragon Ver Mensaje
Por cierto, las dos bases de datos estan en el mismo servidor.

OK. Siendo así podrías hacer una sola consulta para todo. Lo puedes ver en los manuales de SQL Server o en tutora les. Simplemente debes indicar la base a invocar la tabla: FROM database.tablename
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 30/11/2015, 05:52
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

tienes razón, .. el error que me da es el siguiente:

Warning: mssql_query(): message: Invalid object name 'db2.precios'. (severity 16)

la base de datos existe (lo he verificado), ... yo creo que es un problema de escribir la sintaxis correcta para que PHP no de error

la query me funciona correctamente si la pongo en el Microsoft SQL Server Maganement Studio, en codigo nativo SQL SERVER ([bassedata-name].dbo.table-name) pero no soy capaz de traducir esta instruccion para que la entienda el PHP.

  #10 (permalink)  
Antiguo 30/11/2015, 06:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Postea el codigo donde usas esa sentencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 30/11/2015, 09:05
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Os muestro el codigo. EL error que me da es:

Warning: mssql_query(): message: Invalid object name 'db1.ARTICULO'. (severity 16)

Código PHP:
Ver original
  1. <?php
  2. $server = 'servidor\SQLEXPRESS';
  3. $link = mssql_connect($server, 'usuario', 'password');
  4. if (!$link) {
  5.     die('Algo fue mal mientras se conectaba a MSSQL');
  6. }  
  7. $bd_1 = "db1";
  8. mssql_select_db($bd_1, $link);
  9.  
  10. $link2 = mssql_connect($server, 'usuario', 'password',true);
  11. if (!$link2) {
  12.     die('Algo fue mal mientras se conectaba a MSSQL');
  13. }  
  14. $bd_2 = "db2";
  15. mssql_select_db($bd_1, $link2);
  16. $query = "SELECT ARTICULO.CODIGO, ARTICULO.NOMBRE, PRECIOS.PRECIO " ;
  17. $query .= "FROM db1.ARTICULO LEFT JOIN db2.PRECIOS ON ARTICULO.CODIGO = PRECIOS.ARTICULO " ;
  18. $query .= "WHERE ARTICULO.CODIGO = '" . $_POST["codart"] . "'";
  19. ?>
  #12 (permalink)  
Antiguo 02/12/2015, 02:36
 
Fecha de Ingreso: noviembre-2015
Mensajes: 11
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Codigo para implementar consulta a dos bases de datos distintas

Hola a todos. Por fin he conseguido que funcione. Resulta que para MSSQL es necesario usar la sintaxis [database].[schema].[object], con lo que la sintaxis quedaría db1.dbo.ARTICULO y db2.dbo.PRECIOS

Muchas gracias a todos por vuestras aportaciones.

Etiquetas: bases, distintas, implementar, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:41.