Foros del Web » Programando para Internet » PHP »

Cambiar conexión de una BD a otra

Estas en el tema de Cambiar conexión de una BD a otra en el foro de PHP en Foros del Web. Hola a todos! Sigo con mis dudas de php ;) Estoy intentando cambiar la conexión de una BD a otra BD. Para conectarme a la ...
  #1 (permalink)  
Antiguo 07/04/2010, 12:11
 
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 2 meses
Puntos: 0
Cambiar conexión de una BD a otra

Hola a todos!

Sigo con mis dudas de php ;)

Estoy intentando cambiar la conexión de una BD a otra BD. Para conectarme a la primera, tengo un archivo donde especifico las variables de sesión, y otro archivo (oracle_inc.php) en el que a partir de dichas variables se conecta a la BD y que contiene las funciones db_query, db_logoff, etc...

Una vez he terminado de trabajar con esa BD, deseo conectarme a otra. Había pensado en destruir la sesión, crear una nueva a partir de otro archivo con otras variables de sesión (mismo nombre de variable pero diferente contenido) y así poder utilizar el mismo archivo oracle_inc.php para realizar las operaciones.

El problema es que, como era de esperar, aparece el famoso mensaje "Cannot send session cache limiter - headers already sent ". Así pues, ¿es problema de que no estoy destruyendo bien la sesión anterior o debo cambiar obligatoriamente el nombre de las variables de sesión y crear otro archivo, por ejemplo, un oracle_inc2.php, para poder realizar la nueva conexión? ¿No hay ningún otro modo, digamos, un poco más ortodoxo?

Gracias de antemano
  #2 (permalink)  
Antiguo 07/04/2010, 15:56
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Cambiar conexión de una BD a otra

Hola Amigo,

La verdad que si pondrías un ejemplo con un código resumidos muchos te contestarían más rápido.

El problema no está en que conectes o no a otra base de datos, el tema es que estas llamando a
Código PHP:
session_start() 
despúes de haber mandado algo a la salida standart.

Busca el
Código PHP:
session_start() 
y pongo así

Código PHP:
<?php
session_start
();

//Aquí el resto del código
Nada debe haber antes de <?php.

Si estas usando sesiones basadas en db, el tema es que te fijes que algo esta se está imprimiendo antes de enviar las cabeceras de la sesión, no necesariamente tiene que se un código que hallas puesto puede ser un error lo que este saliendo, si es que tienes el reporte de errores activado.
  #3 (permalink)  
Antiguo 08/04/2010, 01:28
 
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambiar conexión de una BD a otra

Buenas abcdefghi! Gracias por la respuesta. Hago caso de tus palabras ;). Estas son las variables de sesión que tengo en el archivo "config_inc.php":

Código PHP:
session_start();

$_SESSION['DB_NAME'] = "DB_NAME";        // Nombre de la base de datos
$_SESSION['DB_USER'] = "DB_USER";        // Usuario para el acceso
$_SESSION['DB_PASS'] = "DB_PASS";        // Contraseña para el acceso 
Por otro lado, el archivo "oracle_inc.php" que es el que realiza la conexión a la BD y las operaciones de transferencia, logoff, etc... (no pongo el código porque creo que es irrelevante).

Por último, en el archivo principal, wm.php tengo:

Código PHP:
include "./Config/config_inc_lib.php";
include 
"./Config/oracle_inc.php";
... 
Llegados a un punto de wm.php, deseo desconectarme de la BD a la que estoy conectado, con los valores "DB_NAME", "DB_USER" Y "DB_PASS", y conectarme a otra con los valores almacenados en el archivo "config_inc2.php":

Código PHP:
session_start();

$_SESSION['DB_NAME'] = "DB_NAME2";        // Nombre de la base de datos
$_SESSION['DB_USER'] = "DB_USER2";        // Usuario para el acceso
$_SESSION['DB_PASS'] = "DB_PASS2";        // Contraseña para el acceso 
Así pues, mi duda está en cómo pasar de la primera BD a la segunda. Añado que antes de conectarme a la segunda BD tengo que sacar muchos datos por salida estandar, por lo que no es posible poner el session_start() al principio de toda salida.

Espero haber aclarado un poco el problema (que no la solución).
Gracias por la ayuda!
  #4 (permalink)  
Antiguo 08/04/2010, 03:45
 
Fecha de Ingreso: enero-2010
Mensajes: 69
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Cambiar conexión de una BD a otra

Bueno, encontré la solución, aquí la dejo para quien le pueda interesar.

No hace falta tener dos archivos por separado con los nombres de las variables de sesión de las conexiones a las distintas BD. Pero sí es necesario, en un mismo archivo, definir las variables de sesión elegidas para cada conexión, para lo cual, obviamente, necesitan tener nombres diferentes:

Código PHP:
session_start();

// database
$_SESSION['DB_NAME1'] = "DB_NAME1";               // Nombre de la base de datos
$_SESSION['DB_USER1'] = "DB_USER1";               // Usuario para el acceso
$_SESSION['DB_PASS1'] = "DB_PASS1";             // Contraseña para el acceso

$_SESSION['DB_NAME2'] = "DB_NAME2";               // Nombre de la base de datos
$_SESSION['DB_USER2'] = "DB_USER2";               // Usuario para el acceso
$_SESSION['DB_PASS2'] = "DB_PASS2";           // Contraseña para el acceso 
Aparte, serán necesarios dos archivos diferentes que manejen las dos conexiones a la BD, cada uno con las variables de sesión correspondientes a cada conexión. Así, mientras para la BD1 tendrá, por ejemplo, un OCIPlogon($DB_USER1, $DB_PASS1, $DB_NAME1), un db_BD1_query, etc., el otro tendrá un OCIPlogon($DB_USER2, $DB_PASS2, $DB_NAME2, un db_BD2_query, etc.

Por último, antes de sacar ningún mensaje por salida estándar, habrá que añadir estas dos líneas al principio del archivo principal:

Código PHP:
include "./Config/oracle_inc_lib.php";
include 
"./Config/oracle_inc_intr.php"
Y a partir de ahí, dependiendo de a qué BD se desea acceder, se llama a unas funciones o a otras. Espero que sea útil.

Saludos y gracias!

Etiquetas: bd
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 19:10.