Foros del Web » Programando para Internet » PHP »

conexión a bd

Estas en el tema de conexión a bd en el foro de PHP en Foros del Web. ok.. hola a tod@s Resulta que estoy realizando modificaciones sobre una aplicación prefabricada... open source... y bueno quiero integrarla con otra aplicación, o al menos ...
  #1 (permalink)  
Antiguo 17/02/2005, 13:22
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
conexión a bd

ok.. hola a tod@s

Resulta que estoy realizando modificaciones sobre una aplicación prefabricada... open source... y bueno quiero integrarla con otra aplicación, o al menos traer (mostrar) información de otra base de datos...

La aplicación a la cual le realizo modificaciones realiza su conexión y guarda los datos en una variable global.. tipo:

global $g_db_connected;

asi es como en cualquier parte simplemente realizo las respectivas transacciones sin ningun inconveniente... el lio viene cuando deseo realizar la conexión a la otra base de datos que esta en el mismo servidor... pues no sé porque se de daña la conexión de la aplicación 1 y tampoco muestra la conexión de la aplicación2...

mi pregunta... como le hago para cerrar por asi decirlo temporalmente la conexión de la aplicación1, realizar mi conexión a la aplicación 2, traer los datos y seguir como si nada??

mmm fui clara?
  #2 (permalink)  
Antiguo 17/02/2005, 14:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La declaración:

global $g_db_connected;

totalmente fuera de contexto (sin ver el código que lo precede ..) no explica mucho sobre su uso .. Por ejemplo .. no sé si se estará usando bajo una función() . .o bien es una aplicación bastente "vieja" donde "antes" (versiones 3? o 4.0.? de PHP) se usaba y ahora no es necesario declararlo como "global".

Sobre los problemas de conexión .. Si tu usas dos BD (dos conexiones) en un mismo script .. tienen que manejar ambos códigos de acceso a tus BD los "links de conexión" .. no pueden dejarse "libres" como normalmente puedes hacerlo si sólo conectas en un script concreto a una BD .. omitiendo su uso ..

El link de conexión lo define toda función de mysql_xxx() como opcional y es lo que tendras que crear para tu conexión1 y 2
Código PHP:
$link_db_1=mysql_connect(.... bd1....);
mysql_select_db("bd",$link_db_1);
$resultado_bd_1=mysql_query($sql,$link_db_1); 
y lo mismo para la BD 2 ..

Revisa que el código que usa para conectarse tu aplicación pre-fabricada use (o tendrás que modificarla) dicho link de conexión .. y en función de eso definir el tuyo de tus nuevos "codigos" y el de la aplicación pre-fabricada . .(o prueba almenos a definir el link de conexión para tus códigos nuevos).

Un saludo,
  #3 (permalink)  
Antiguo 17/02/2005, 14:27
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
gracias por responder, vos siempre tan oportuno...

bueno ya he realizado mi link de conexión y no funciona... por eso mi pregunta y lo de la variable definida como global...

asi hace la conexión la aplicación prefabricada

Código PHP:
function db_connect$p_hostname$p_username$p_password$p_port ) {
    global 
$g_db_connected;
    
$t_result = @mysql_connect"$p_hostname:$p_port"$p_username$p_password );

if ( !
$t_result ) {
    
db_error();
            
trigger_errorERROR_DB_CONNECT_FAILEDERROR );
            return 
false;
    }
    
    
$g_db_connected true;
    return 
true;
    } 
y ya pues yo realizo mi conexión a la base de datos 2 en el momento que la necesito... el cuento es que no se si tenga algo que ver esa conexión como esta, pues no me realiza ninguna de las dos consultas.. ni de la base1 ni de la base2 cuando realizo la conexión a la base2

que horror!!!...

lo que pregunto es... si tengo una conexión abierta o con algun mysql_xxxx podria estar pasando q de alguna manera no sepa para donde irse.. asi mis variables de conexion sean diferentes?

no pido tanto una respuesta pues asi como de código y esas cosas.. si no como una "luz" lógica o técnica de que puede estar pasando....

aaah tambien tiene estas funciones... mira que lleva a arrays los querys.. y las funciones de mysql...

lo que no quiero es cambiar la conexión de la aplicación prefabricada...

Código PHP:
function db_query$p_query$p_error_on_failure=true ) {
        global 
$g_queries_array;

        
array_push $g_queries_array$p_query );

        
$t_result = @mysql_query$p_query );

        
# @@@ remove p_error_on_failure and use @ in every caller that used to use it
        
if ( !$t_result && $p_error_on_failure ) {
            
db_error($p_query);
            
trigger_errorERROR_DB_QUERY_FAILEDERROR );
            return 
false;
        } else {
            return 
$t_result;
        }
    }

    
# --------------------
    
function db_select_db$p_db_name ) {
        
$t_result = @mysql_select_db$p_db_name );

        if ( !
$t_result ) {
            
db_error();
            
trigger_errorERROR_DB_SELECT_FAILEDERROR );
            return 
false;
        }

        return 
$t_result;
    }

    
# --------------------
    
function db_num_rows$p_result ) {
        return 
mysql_num_rows$p_result );
    }

    
# --------------------
    
function db_affected_rows() {
        return 
mysql_affected_rows();
    }

    
# --------------------
    
function db_fetch_array$p_result ) {
        return 
mysql_fetch_array$p_result );
    }

    
# --------------------
    
function db_result$p_result$p_index1=0$p_index2=) {
        if ( 
$p_result && ( db_num_rows$p_result ) > ) ) {
            return 
mysql_result$p_result$p_index1$p_index2 );
        } else {
            return 
false;
        }
    }

    
# --------------------
    # return the last inserted id
    
function db_insert_id() {
        if ( 
mysql_affected_rows() > ) {
            return 
mysql_insert_id(); 
        } else  {
            return 
false
        }
    }

    
# --------------------
    
function db_field_exists$p_field_name$p_table_name$p_db_name '') {
        global 
$g_database_name;

        if (
$p_db_name == '') {
            
$p_db_name $g_database_name;
        }

        
$fields mysql_list_fields($p_db_name$p_table_name);
        
$columns mysql_num_fields($fields);
        for (
$i 0$i $columns$i++) {
          if ( 
mysql_field_name$fields$i ) == $p_field_name ) {
              return 
true;
          }
        }

        return 
false;
    } 

Última edición por Salome; 17/02/2005 a las 14:31
  #4 (permalink)  
Antiguo 17/02/2005, 14:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno .. ahora viendo el "global" ese en su contexto se vé que está en una función OK, pero realmente no es el link de conexión .. que es algo que se haga en:

$link = mysql_connect( "$p_hostname:$p_port", $p_username, $p_password );

cosa que el código que indicas (la función db_connect() ) ni lo declara como global .. ni lo devuelve como función (sólo devuelve un true o false si conecto . .nada más)

Sólo en mysql_connect() obtienes tu link de conexión ..

El ejemplo que pones de tu aplicación prefabricada no usa links de conexión .. pero "tiene pinta" de un objeto (será así? $db->nose() ...) .. En fin aclara bien que usas concretamente . .por qué por ejemplo si todas esas funciones son de un objeto .. se trataría de instanciarlo nuevamente para tu 2° BD conexión (para eso están los objetos) .. Y si són funciones sueltas .. da "gracias" que sólo tienes esas que modificar en caso extremo (peor sería que "a pelo" estubiera en tu aplicación pre-fabricada todas las llamadas a mysql_xxx() directo .. )


Un saludo,
  #5 (permalink)  
Antiguo 17/02/2005, 15:30
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
nada, no es un objeto.. son funciones...

pero igual no termino de entender que esta pasando... todo esta en funciones...

mmm no se supone que si yo realizo otra conexión con otras variables.. y datos diferentes, igual me deberia hacer la conexión!.. al menos eso he hecho en otros desarrollos.. y ha funcionado.. acá no termino de entender.
  #6 (permalink)  
Antiguo 18/02/2005, 05:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Salomé .. insisto que revises la documentación oficial de:

mysql_connect() y en general de toda función de acceso a Base de datos .. Ahí veras como siempre sale entre [] en la definición de la función implicada el "link de conexión" .. como "opcional" .. si no lo defines y usas, se asume el primero que se conectó. En las funciones de tus ejemplos NO lo usas, así que si vas en un mismo script DOS o más conexiones a otra Base de datos en el mismo host u otro ... Debes usar dicho link de conexión para hacer "referencia" a que BD (conexión) quieres trabajar en cada punto del script en cuestión.

Un saludo,
  #7 (permalink)  
Antiguo 18/02/2005, 06:41
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
yo si uso otro link de conexión! para la base de datos 2, los códigos que te mostré son los de la aplicación prefabricada.... por eso te digo que no entiendo q puede estar pasando, pues yo realizo la otra conexión a la base de datos2, con nuevos datos para link de conexión.... incluso ya he probado con las mismas variables (y los datos correspondientes para la conexión con la base de datos2) y con otras variables también he realizado la prueba.


bueno, en un post anterior, mostraba como se conecta la aplicación prefabricada a la base de datos1

en el lugar donde necesito información de la base de datos2 hago lo siguiente...

Código PHP:
require_once('conecta.php');
$conectar Conectarse();
//realizo la respectiva transacción donde mi link de conexión es $conectar 

Código PHP:
//script de conexión conecta.php
-----------------------------------------------
<?php
include('config.php'); //archivo que contiene datos de conexión para bd2
function Conectarse(){
    
// verificando servidor, usuario y contraseña   
    
if (!($conectar=mysql_connect($sql_host,$sql_usuario,$sql_pass)))  {
        echo 
"<BR><BR>Error conectando a la base de datos.... DATOS DE USUARIO.";
        exit();
    }
    
// verificando base de datos   
    
if (!mysql_select_db($sql_db,$conectar)) {
        echo 
"<BR><BR>Error seleccionando la base de datos.... CON LA BASE DE DATOS.";
        exit();
       }
    return 
$conectar;
}
?>

En fin.... veré que puedo hacer o que es lo que esta pasando...

un saludo.. Gracias...
  #8 (permalink)  
Antiguo 18/02/2005, 06:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero (para ir aclarando) ..

Tu conexión (tus funciones) funcionan de forma independiente? (supongo que si?)
La otra conexión que NO USA ni define un link .. funciona de forma independiente?

Si es así .. entonces la única prueba que te queda hacer es definir el dichoso link de conexión en las funciones de tu aplicación prefabricada y ver que pasa (ahí debería funcionar) .. "Asumir" que un link que no se asigna a nada junto con otro que se definió se pueden usar .. tal vez no es buena idea o no se pueda hacer (no he visto comentario expreso que diga que sucede en ese caso .. tendrás que probarlo).

Un saludo,
  #9 (permalink)  
Antiguo 18/02/2005, 06:48
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
ok, gracias... haré entonces las respectivas pruebas y te estaré comentando que paso.. aahhh si, todo funciona independientemente.. tanto los funciones de la aplicación prefabricada como las de mi conexión a la base de datos2....

entonces a hacer pruebas a ver que pasa...

Ciao...
  #10 (permalink)  
Antiguo 18/02/2005, 09:34
Avatar de Salome  
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 1.032
Antigüedad: 21 años, 5 meses
Puntos: 1
mmm bueno, logré resolver lo de la conexión con la bd2, aunque la verdad sigo sin entender..

resulta que como no sabia que pasaba, se me ocurrió simplemente tener las variables con el mismo nombre que se conecta a la bd1... y pues cambie sus valores, sólo en el momento que necesito hacer la conexión a la bd2... y funciona todo correctamente, me hace la conexión con la bd2, muestra la información y se sigue visualizando la información de la bd1.

pero creeme que me queda cierta inconformidad...
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 20:17.