Foros del Web » Programando para Internet » PHP »

Cómo conectar con dos bases de datos sql server con php

Estas en el tema de Cómo conectar con dos bases de datos sql server con php en el foro de PHP en Foros del Web. Hola a todos/as: He desarrollado una aplicación con PHP y SQL SERVER en la que necesito acceder a dos Bases de Datos. Hago la conexión ...
  #1 (permalink)  
Antiguo 20/01/2009, 06:28
 
Fecha de Ingreso: enero-2008
Mensajes: 6
Antigüedad: 16 años, 3 meses
Puntos: 0
De acuerdo Cómo conectar con dos bases de datos sql server con php

Hola a todos/as:

He desarrollado una aplicación con PHP y SQL SERVER en la que necesito acceder a dos Bases de Datos.

Hago la conexión con las dos bases de Datos:

function conecta()
{
global $nombre_bd;
global $variable_user_bd;
global $variable_password_bd;
global $variable_host_bd;

$db=mssql_connect($variable_host_bd,$variable_user _bd,$variable_password_bd);
mssql_select_db($nombre_bd,$db);
return $db;
}


function conecta_terceros()
{
global $nombre_bd_terceros;
global $variable_user_bd_terceros;
global $variable_password_bd_terceros;
global $variable_host_bd_terceros;

$db_terceros=mssql_connect($variable_host_bd_terce ros,$variable_user_bd_terceros,$variable_password_ bd_terceros);
mssql_select_db($nombre_bd_terceros,$db_terceros);
return $db_terceros;
}


y hasta ahí todo correcto.

El problema es que sólo actua la conexión que se pone en segundo lugar (lo he probado invirtiendo el orden).

Respecto a las sentencias SQL, las hago haciendo uso de la conexión correspondiente, por ejemplo:

$sql="select provincia from provincias where num_provincia='$num_provincia'";
$res=mssql_query($sql,$db_terceros);
while ($reg=mssql_fetch_array($res))
{
$provincia=$reg['provincia'];
}

$sql="select num_fichatecnica from $name_tabla where num_fichatecnica_md5='$num_objeto_md5'";
$res=mssql_query($sql,$db);
while ($reg=mssql_fetch_array($res))
{
$num_fichatecnica=$reg['num_fichatecnica'];
}


pero la primera consulta da error ya que hace referencia a la primera conexión con la Base de Datos y la que está activa es la segunda.

En fin, la verdad es que he buscado una respuesta y he hecho mil pruebas y ahora mismo estoy bloqueado y necesito que esto funcione. Y SE QUE SE PUEDE HACER.... He encontrado la solución para MySQL, ¿Es que no se puede hacer con SQL SERVER?... SEGURO QUE SI SE PUEDE.

A ver si alguien me puede ayudar.

MUCHAS GRACIAS
  #2 (permalink)  
Antiguo 20/01/2009, 14:17
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Cómo conectar con dos bases de datos sql server con php

Ve al foro de PHP y coloca alla tu pregunta, estas en un foro de SQL SERVER
  #3 (permalink)  
Antiguo 20/01/2009, 14:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Cómo conectar con dos bases de datos sql server con php

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #4 (permalink)  
Antiguo 20/01/2009, 14:59
 
Fecha de Ingreso: mayo-2008
Mensajes: 24
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Cómo conectar con dos bases de datos sql server con php

Hola, yo lo que hago es crear 2 archivos por separado por ejemplo conexion1.php y conexion2.php con el contenido:

conexion1.php:
$db=mssql_connect($variable_host_bd,$variable_user _bd,$variable_password_bd);
mssql_select_db(base de datosA,$db);
return $db;


conexion2.php:
$db=mssql_connect($variable_host_bd,$variable_user _bd,$variable_password_bd);
mssql_select_db(base de datosB,$db);
return $db;

ahora solo tienes que poner include("conexionx.php"); antes de ejecutar la sentencia sql.


Eso de que solo te funcione la segunda es por que php lee el codigo de arriba a abajo, entonces la conexion 1 te la desconecta y te pone la conexion2.

ejemplo:

include("conexion1.php");
mysql_select("select * from tabla1);
mysql_select("select * from tabla2);

include("conexion2.php");
mysql_select("select * from tabla5);

include("conexion1.php");
mysql_select("select * from tabla4);

no te queda otro remedio que ir alternando el include segun la base de datos a consultar.
  #5 (permalink)  
Antiguo 21/01/2009, 06:03
 
Fecha de Ingreso: enero-2008
Mensajes: 6
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Cómo conectar con dos bases de datos sql server con php

Gracias por tu respuesta, estoy totalmente de acuerdo con tus argumentos, pero existe un problema en el caso de consultas anidadas, por ejemplo:

Imagina un listado de Proyectos (BD2) y cada proyecto pertenece a una Provincia (BD1). El SELECT que decodifica el numero de la provincia estará anidado dentro del bucle del SELECT que nos muestra todos los Proyectos. Al cambiar la conexión de la Base de Datos, dejará de funcionar la consulta primaria de Proyectos y tendremos un ERROR.

Yo creía que se podían crear las conexiones a las distintas Bases de Datos y llamarlas (según las necesitemos) en las distintas consultas, etc...

Conozco gente que lo hace con MySQL, pero como se hace en SQL SERVER.
  #6 (permalink)  
Antiguo 21/01/2009, 06:32
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Respuesta: Cómo conectar con dos bases de datos sql server con php

En MSSQL no lo usé, pero en debería funcionarte lo siguiente:

En un include setea ambas conexiones, luego podrías teóricamente hacer:

Código PHP:
include("conexion.php");
mysql_select("select * from basededatos1.tabla1);
mysql_select("
select from basededatos2.tabla2);
mysql_select("select  tbl1.campo1, tbl2.campo2 from basededatos1.tabla1 tbl1 inner join basededatos2.tabla2 tbl2 on tbl2.campo2 = tbl1.campo1); 
Yo lo he usado así sin ningún problema...es más, si pasas la referencia de un $conn a mysql, no es necesario especificar la dbname en el query esa para esa consulta, ej:

Código PHP:
include("conexion.php");
mysql_select("select  tbl1.campo1, tbl2.campo2 from tabla1 tbl1 inner join basededatos2.tabla2 tbl2 on tbl2.campo2 = tbl1.campo1, $conn1); 
En mssql debería ser igual...en todo caso si no te funciona armate un archivo para probarlo en mysql, a ver si es algo que estás seteando mal o es que no lo soporta mssql (que sería raro).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 02:01.