Foros del Web » Programando para Internet » PHP »

Conexión a dos BD

Estas en el tema de Conexión a dos BD en el foro de PHP en Foros del Web. Hola!! Necesito realizar varias consultas a BD diferentes, hasta el momento no he logrado hacerlo, es por eso que acudo a ustedes. Estoy haciendo un ...
  #1 (permalink)  
Antiguo 28/07/2004, 12:29
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
Conexión a dos BD

Hola!!

Necesito realizar varias consultas a BD diferentes, hasta el momento no he logrado hacerlo, es por eso que acudo a ustedes.

Estoy haciendo un archivo donde tengo dos funciones que realizan la conexión a las BDs:

<?php
function Conectarse()
{
if (!($conexion=mysql_connect("localhost","usuario"," pass")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("bd1",$conexion))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $conexion;
}

function Conectarse2()
{
if (!($conexion2=mysql_connect("localhost","usuario", "pass")))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("db2",$conexion2))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $conexion2;
}
?>


Este archivo lo llamo con un include en el archivo donde hago las consultas, y tiene lo siguiente:

<?
include("conect.php");
$conexion=Conectarse();
$conexion2=Conectarse2();
$sqlPass=mysql_query("SELECT id, nombre, password FROM usuarios WHERE nombre='$usuario' AND password='$password'",$conexion);
$regPass=mysql_fetch_array($sqlPass);

$sqlAviso=mysql_query("SELECT aviso FROM avisos WHERE usuario='$usuario'",$conexion2);
$regAviso=mysql_fetch_array($sqlAviso);
?>


El error que me marca es de argumentos no validos en mysql, esto es en la primer consulta.

Espero me puedan orientar, desde ya gracias!!
  #2 (permalink)  
Antiguo 28/07/2004, 12:48
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 15 años
Puntos: 0
Hola Serenity, solo debes seleccionar la tabla en conectarse2, la base de datos ya la abres en conectarse
  #3 (permalink)  
Antiguo 28/07/2004, 13:21
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
Gracias cocker, pero o no te entiendo o no me he explicado bien, lo que necesito es conectarme a dos diferentes BD es por eso que con la función Conectarse me conecto a una BD y con Conectarse2 me conecto a otra BD.
  #4 (permalink)  
Antiguo 28/07/2004, 15:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En principio la técnica sería correcta (usar dos links de conexión diferentes y usarlos cada uno en la BD que se ha de actuar para los mysql_query() y demás).

Podrías ver el error exacto que Mysql está arrojando (sea de conexión o SQL) usando mysql_error() tipo:

$sqlPass=mysql_query("SELECT id, nombre, password FROM usuarios WHERE nombre='$usuario' AND password='$password'",$conexion) or die(mysql_error());

(usalo en ambos mysql_query() .. podrías usarlo también en los mysql_connect() y mysql_select_db() para ver si tienes problemas de conexión)

Un saludo,
  #5 (permalink)  
Antiguo 28/07/2004, 16:17
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
ok cluster, gracias!!

lo checo y les comentó si lo hemos podido resolver

Saludos
  #6 (permalink)  
Antiguo 28/07/2004, 16:37
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
cluster he segido tu recomendación, y el error que me da es el sig:

Table 'avisos.usuarios' doesn't exist

osea que esta tratando de llamar un campo que no existe en esa tabla

las estructuras de mis tablas son las siguientes:

bd1 ---Tabla usuarios --

id
nombre
password

bd2 ----Tabla avisos

id
aviso
usuario

también menciono que si agrego el or die(mysql_error()) a los mysql_connect() y mysql_select_db() no manda ningún error, pone la pantalla en blanco, ni siquiera me manda el error que mencioné anteriormente.
  #7 (permalink)  
Antiguo 28/07/2004, 17:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Fijate que dice "Table 'avisos.usuarios' doesn't exist"

Y según mencionas no es usuarios .. sino usuario el nombre de ese campo en al tabla avisos.

Un saludo,
  #8 (permalink)  
Antiguo 28/07/2004, 17:48
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
si, en primera instancia también lo creí, pero no; en mi consulta no estoy llamando ese campo, hago referencia de él en el where pero lo estoy haciendo adecuadamente.

$sqlAviso=mysql_query("SELECT aviso FROM avisos WHERE usuario='$usuario'",$conexion2);
$regAviso=mysql_fetch_array($sqlAviso);
  #9 (permalink)  
Antiguo 28/07/2004, 17:52
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
no entiendo porque ese error, parece que estoy haciendo referencia a un campo que no existe, pero la realidad es que no
  #10 (permalink)  
Antiguo 28/07/2004, 20:47
 
Fecha de Ingreso: julio-2004
Ubicación: Poza Rica Ver.,
Mensajes: 16
Antigüedad: 13 años, 4 meses
Puntos: 0
Archivo: conect.php
<?php
function ConectarseX(){
if (!($conexion=mysql_connect("localhost","usuario"," pass"))){
echo "Error conectando a la base de datos.";
exit();
}
return $conexion;
}

?>
-------------------------------------------------
<?php
include("conect.php");
$conexion=ConectarseX();

$q1=sprintf("SELECT id, nombre, password FROM usuarios WHERE nombre='%s' AND password='%s'",$usuario,$password);
$q2=sprintf("SELECT aviso FROM avisos WHERE usuario='%s'",$usuario)


$ds1=mysql_db_query("bd1",$q1,$conexion);
$ds2=mysql_db_query("db2",$q2,$conexion);

$regPass=mysql_fetch_array($ds1);
$regAviso=mysql_fetch_array($ds2);
/*
etc
*/
?>


Mira podria probar con la funcion mysql_db_query...

Otro comentario en la liga dices que tus bases de datos se llaman bd1(Tabla usuarios) y
bd2(Tabla avisos), pero en las funciones para las cuales realizas la conexion no concuerdan con esa informacion, error de dedo ?:
.
.
.
if (!mysql_select_db("bd1",$conexion))
.
.
.
if (!mysql_select_db("db2",$conexion2))
.
.
.

deberias checar eso
  #11 (permalink)  
Antiguo 28/07/2004, 23:22
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
Table 'avisos.usuarios' doesn't exist

osea que esta tratando de llamar un campo que no existe en esa tabla
Fíjate que no te está diciendo que no existe el campo usuarios de la tabla avisos... sino que no existe la tabla usuarios en la base de datos avisos.

Saludos
  #12 (permalink)  
Antiguo 28/07/2004, 23:40
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Checa bien los nombres de las BD's que utilizas "bd1" y "db2". Supongo que por "proteger" tus nombres de BD's no los has puesto aquí tal cuáles son.
¿No estarás confundiendo BD's con tablas no?
Si no es el caso entonces...
Creo que el problema que tienes es hacer funcionar la consulta simple. Intenta primero hacerlo con una sola BD. Luego con la otra... y finalmente con las dos juntas.

Saludos
  #13 (permalink)  
Antiguo 28/07/2004, 23:40
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
También te diré que no es necesario duplicar la función "Conectarse" como lo estás haciendo porque de esa manera no estás reutilizando el código (que es la finalidad de una función).
Si te das cuenta, lo único que cambia entre las dos funciones es el nombre de la BD... o sea que puedes hacer una sola función que reciba como parámetro ese nombre de BD. También el "echo" que pones lo puedes simplificar con el die(). Tu función quedaría mejor algo así:
Código PHP:
function Conectarse($db_name){
   
$conexion = @mysql_connect("localhost","usuario","pass") or die("Error conectando a la base de datos.".mysql_error());
   @
mysql_select_db($db_name,$conexion) or die("Error seleccionando la base de datos.".mysql_error());
   return 
$conexion;

Ahora, puedes llamar a la misma función dos veces simplemente cambiando el parámetro $db_name
Código PHP:
include("conect.php");
$conexion Conectarse("bd1");
$conexion2 Conectarse("bd2");
///etc... 
Saludos
  #14 (permalink)  
Antiguo 29/07/2004, 16:33
 
Fecha de Ingreso: marzo-2002
Mensajes: 299
Antigüedad: 15 años, 9 meses
Puntos: 1
gracias a todos por sus sugerencias, pero esto sigue sin funcionar, he checado todo y los names de las BD son correctos, he probado todo lo que se ha comentado aquí, pero nada, todo sigue igual:

Table 'avisos.usuarios' doesn't exist

sigo checando, si tienes más sugerencias desde ya se los agradezco.

Saludos
  #15 (permalink)  
Antiguo 29/07/2004, 17:28
 
Fecha de Ingreso: febrero-2004
Ubicación: Resistencia - Argentina
Mensajes: 299
Antigüedad: 13 años, 9 meses
Puntos: 0
no te convendria ir chequeando por partes la consulta con algun front-end, podrias ir probando cada parte, para ver bien en donde está el error.
  #16 (permalink)  
Antiguo 01/08/2004, 17:49
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Para poder interpretar mejor los mensajes de error sería bueno que pongas los nombres reales de tus BD's y de tus tablas.
Si no te dio error en mysql_select_db() es porque la BD "avisos" si existe. Ahora tienes que verificar que dentro de esa BD (avisos) exista una tabla llamada "usuarios".

Saludos
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 09:25.