Foros del Web » Programando para Internet » PHP »

¿Como manejo información de 2 BD?

Estas en el tema de ¿Como manejo información de 2 BD? en el foro de PHP en Foros del Web. Bueno, me surgió un problema y es que nunca había trabajado con información de 2 BD, la cosa es que en un formulario debo mostrar ...
  #1 (permalink)  
Antiguo 02/12/2002, 11:11
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 22 años, 2 meses
Puntos: 0
Pregunta ¿Como manejo información de 2 BD?

Bueno, me surgió un problema y es que nunca había trabajado con información de 2 BD, la cosa es que en un formulario debo mostrar varias opciones, pero la información la tengo en dos bases distintas, lo que yo hago es en el formulario hacer un include a un archivo donde tengo funciones con queries a mis 2BD y hago el include de mis 2 diferentes archivos de conexión y lo que pasa es que solo me hace los queries de la última conexión hecha y los de la otra base me dice que no existe una relación de ese tipo, es decir, no reconoce esa conexión.

Como debo hacerle pues para poder traer mis queries al formulario. Ya intente poner los queries en 2 archivos diferentes pero al hacer el include en el formulario, resulta lo mimo, solo me trae los queries del segundo include, bueno, y varias maneras mas he intentando, seguro que será algo sencillo, pero, desconozco como hacerlo.

Ojala alguien pueda ayudarme, pues ya llevo dos días buscando la respuesta.
  #2 (permalink)  
Antiguo 02/12/2002, 11:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Tienes que emplear "links" de conexiones diferentes y usar todos los parámetros referentes a cada una de las dos base de datos .. ahora ya no vale hacer cosas como:

mysql_connect(host,user,pass);
mysql_select_deb("tabla");
$consulta_bd1=mysql_query($consulta) ..

sino que hay q decir cosas como:

Código PHP:
$link_db1=mysql_connect(host,user,pass);
mysql_select_db("base_datos_db1",$link_db1);
$consulta_bd1=mysql_query($consulta,$link_db1); 
Eso para cada Base de datos que trabajes ..

Ahora, si quieres hacer una consulta que arroje resultados de ambas base de datos en un mismo "query" (consulta) .. "creo" que no vas a poder hacerlo .. te tocará componer esa información de ambas base de datos haciendo consultas independientes.

Si no te aclaras .. mejor explica que datos tienes en ambas base de datos y que es lo que quieres obtener de las dos y como .. Algo de código q usa tambien será útil.


Un saludo,
  #3 (permalink)  
Antiguo 02/12/2002, 14:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

¿Las dos BD estan en el mismo servidor? ¿El usuario sirve para las dos BD? No se si desde PHP funciona, pero desde la linea de comandos de MySQL puedes acceder a una tabla de otra BD del mismo servidor que comparten usuario referenciando la tabla de la forma basedatos.tabla. Algo asi:

select * from tabla1, otra_BD.tabla2

Ya digo que esto funciona en la linea de comando de MySQL.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 03/12/2002, 10:58
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 22 años, 2 meses
Puntos: 0
Mensaje Mas datos

Gracias a ambos por responder, ahora, si, las 2 bd estan en el mismo servidor, estan hechas en Postgres, lo que tengo que desplegar en el formulario son 3 listbox, lista completa de asesores y de seguidores viene de una BD llamada usuarios, y lista completa de cursos registrados, que viene de clinea, en el formulario hago un inlcude a mi archivo de queries "select.php". en ese archivo al principio hago 2 includes
include("dbConect.inc.php"); conexion a base usuarios
include("dbConect2.inc.php"); conexion a base clinea.

y los queries en funciones debajo.
************************************************** **
function eligeActor($tipoactor) {

$query = "select * from $tipoactor";
$resp = pg_exec("$query");

$fila = pg_numrows($resp);

if($fila > 0) {

print "<select name=$tipoactor>
<OPTION SELECTED>"; //</OPTION>";

for ($j = 0; $j < $fila; $j++) {

$datosActor = pg_fetch_array($resp,$j);

$idActor = $datosActor["id_$tipoactor"];
$nomActor = $datosActor["$tipoactor"."_nombre"];

print "<OPTION VALUE=$idActor>$nomActor</OPTION>";

} //end for $fila
print "</select>";
} //end if $fila
else { print "Hubo un error en la Base de Datos<br>";}

} //end funcion eligeActor
************************************************** *

Esa funcion es la que me da la lista de asesores y seguidores, pero no funciona porque su conexion es la del primer include, si la pongo como ultimo include, me trae esas 2 listas pero la de los cursos abiertos no porque solo le hace caso al ultimo include, y es mi problema, ¿Cómo le hago para traer las 3 listas que necesito de las 2bd?
  #5 (permalink)  
Antiguo 03/12/2002, 14:08
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Bien, no se como funciona PHP con postgres. Pero si es parecido a como lo hace con MySQL, una solucion seria usar distintas variables de conexion para cada BD y modificar el codigo de las funciones para usar esa conexion. O mejor aun, pasar un parametro que sea la conexion.

Otra solucion que no necesita modificar el codigo es no poner los dos include() al principio, sino justo delante de la llamada a la funcion correspondiente. Algo asi:

include("conecta_BD1.php");
funcion_bd1();
include("conecta_BD2.php");
funcion_bd2();

y si despues vuelves a necesitar la BD 1:

include("conecta_BD1.php");
funcion_bd1_2();

Si te parece feo poner tantos include(), modifica el include para que sea una funcion, incluyes los 2 include(9 al principio y luego vas llamando a la funcion de cada include segun lo necesites.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 04/12/2002, 09:50
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 22 años, 2 meses
Puntos: 0
Buena idea, pero no resulta

Buena idea amigo, pero, así precisamente es como intenté manejarlo y no se puede, porque siempre termina tan solo tomando el ultimo include hecho, aun si el programa que manda a llamar una función no ocupa las 2 bases, solo toma el ultimo include del archivo de queries.

Finalmente lo que tuve que hacer y con lo cual no estoy muy convencido, es a cada función abrirle y cerrarle su conexión, pues intenté de muchas maneras y solo esa resulto. Amigos, muchas gracias por su tiempo, si en algo puedo ayudar mas adelante, con gusto lo haré, ciao!
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 12:18.