Foros del Web » Programando para Internet » PHP »

Mezcla de bases de datos al ejecutar varios scripts

Estas en el tema de Mezcla de bases de datos al ejecutar varios scripts en el foro de PHP en Foros del Web. Hola a tod@s: Gracias por leer el mensaje. Tengo un pequeño gran problema al ejecutar 3 scripts php simultaneamente, cada uno de ellos con accesos ...
  #1 (permalink)  
Antiguo 16/02/2004, 04:30
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 10
Antigüedad: 20 años, 3 meses
Puntos: 0
Mezcla de bases de datos al ejecutar varios scripts

Hola a tod@s:

Gracias por leer el mensaje.
Tengo un pequeño gran problema al ejecutar 3 scripts php simultaneamente, cada uno de ellos con accesos a bases de datos distintas, cada una de ellas con tablas que no tienen nada en común.

Se trata de la ejecución de un gestor de banners (PhpAdsNew http://www.phpadsnew.com/one/), un scripts de encuestas ( Advanced Poll http://proxy2.de/scripts.php) y un libro de visitas (http://www.m-dream.co.uk/scripts/gue..._guestbook.php). Si ejecuto el gestor de banners y la encuesta no hay ningún problema; llevan conviviendo juntos varios meses sin interferir. Pero al ejecutar el libro de visitas al mismo tiempo (se cargan los 3 en una misma página) me aparece un error como el siguiente:

Table 'poll.mg_security' doesn't exist

donde poll es una tabla de la encuesta y mg_security es una tabla del libro de visitas ¿por qué intenta mezclar ambas tablas? me da la impresión de que al ejecutarse a la vez las conexiones de mysql se mezclan... Si pruebo a quitar la encuesta pasa lo mismo pero con el gestor de banners. Si quito ambas cosas, entonces el libro funciona a la perfección.

En fin, esto es un resumen.
Espero que alguien pueda darme alguna pista para intentar resolver esta situación.

Gracias.
Un saludo.
  #2 (permalink)  
Antiguo 16/02/2004, 04:40
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Hola,

Asegurate de poner el correspondiente mysql_select_db() antes de tratar cada script.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 16/02/2004, 07:07
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 10
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola Josemi, muchas gracias por contestar.
Los scripts de banners y encuestas supongo que no tendrán problema puesto que se ejecutan de forma conjunta y no hay inconveniente.
He estado revisando el script del libro de visitas y en su página de índice (la que da el error) veo que se incluye un archivo "db_connection.inc" y que en su interior contiene el código básico de conexión a la base de datos:


$db_location = "localhost"; //Server Type
$db_username = "username"; //Your database user name
$db_password = "password"; //Your database password
$db_database = "guestbook"; //The name of your database
$db_prefix = "mg_";

$getconn = mysql_connect($db_location , $db_username , $db_password);
if (!getconn) die (mysql_error());

mysql_select_db($db_database, $getconn) or die (mysql_error());

Como ves, todo normal, incluso tiene su "mysql_select_db" correspondiente...

¿Alguna sugerencia de cambio en el código para que este scritp ignore las conexiones de las otras bases de datos?

Gracias por tu ayuda.
  #4 (permalink)  
Antiguo 16/02/2004, 07:19
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
El problema es que tu encuesta y tus banners tambien tienen su mysql_select_db(). Y posiblemente tu codigo este ordenado de esta forma:

conexion
select_db(gb)
select_db(ads)
consulta(ads)
consulta(gb)

Es decir, estas haciendo la consulta gb con los valores del select_db de ads.

Tienes que poner el select_db de gb justo antes de la consulta de la gb.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 16/02/2004, 08:00
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 10
Antigüedad: 20 años, 3 meses
Puntos: 0
Corrección

Hola de nuevo,

Entiendo. No obstante, te diré que he cometido un error al decirte esto:

Table 'poll.mg_security' doesn't exist
donde poll es una tabla de la encuesta


poll no es una tabla, es la base de datos que contiene las tablas de la encuesta (en realidad es mundopc_poll). Te lo digo por si te da una nueva pista.

Por favor, echa un vistazo a esta página:

http://mundopc.net/sql/guest/

como ves, hay un banner arriba, la encuesta abajo a la izquierda y el libro de visitas...muestra el error comentado.

Con respecto a tu última respuesta, creo que no va a ser posible porque al ser scripts distintos no puedo variar el orden de las consultas (salvo que se pueda hacer algo que yo desconozco).
Una vez me pasó algo similar, pero en vez de ser con un libro devisitas fue con otro script. El programador me dio dos o tres líneas de código (que encima no me acuerdo) y se solucionó el asunto. Supongo que lo que haría sería como "bloquear" el resto de scripts para ejecutar el suyo de forma aislada.

Es más, tiene que haber algo que hacer dentro del libro de visitas únicamente, puesto que en http://directorio.mundopc.net está funcionando otro script en PHP y no da este error.

En fin, no me gustaría marearte con este asunto, sin embargo, de momento no he recibido respuestas en otros foros y... estoy bastante perdido, supongo que será en base a mis escasos conocimientos en PHP.

Gracias nuevamente.
  #6 (permalink)  
Antiguo 16/02/2004, 08:08
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
Bueno, ¿cual es ahora la distribucion de tu script? Es decir, ¿donde haces el include del db_conection del gb? Si la haces al comienzo del script, quitala de alli. Pon ese include justo antes de donde pones el codigo del gb.

Asi las consultas a partir de ese include db_connection usaran la base de datos del gb.

Es todo cuestion de hacer que el select_db de cada script este justo antes de su script.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 16/02/2004, 11:10
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 10
Antigüedad: 20 años, 3 meses
Puntos: 0
Funciona...?¿

Bueno, parece que después de seguir tus indicaciones, he logrado hacer que la cosa al menos "arranque". Gracias :).

Lo único que no se si esto podría funcionar así, o realmente es una auténtica chapuza...
Échale un vistazo al código, al principio podrás ver el db_connection.inc.php y debe estar ahí, por que seguidamente tenemos el $query. Ahora bien, todo "termina" cuando se ejecuta el @include("inc/header.php"); que es el que "guarda" todo el código de los otros dos scripts:



//////////////////////////////
///Initialise include files///
//////////////////////////////

@include("inc/db_connection.inc.php");
@include("inc/functions.php");
@include("lib/template.inc");

/////////////////////////////////////
///Query Database for website info///
/////////////////////////////////////

$query = "SELECT * FROM mg_website";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);

$lang = $row['d_language'];
$serverpath = $row['s_path'];
$pagetotal = $row['d_entries'];
$home = $row['w_url'];
$theme = $row['d_theme'];
$w_name = $row['w_name'];
$h_text = $row['h_text'];
$imagepath = $row['h_bannerurl'];
$imageheight = $row['h_bannerheight'];
$imagewidth = $row['h_bannerwidth'];

@include("lang/$lang");

/////////////////////////////
//Create new template class//
/////////////////////////////

$t = new Template($serverpath . "/templates/");

/////////////////////////////////////
//Store script execution start time//
/////////////////////////////////////

$startex = scriptExecutionTime();

//////////////////
//Include Header//
//////////////////

@include("inc/header.php");

///////////////////////////////////////////////////
//Start output. If searchable, display search box//
///////////////////////////////////////////////////


include("inc/db_connection.inc.php"); //<------AQUÍ
$query = "SELECT s_search FROM mg_security";
$result = mysql_query($query) or die(mysql_error());
$searchrow = mysql_fetch_array($result);

$showentries .= "<div align=\"center\"><center>\n";
$showentries .= "<form method=\"POST\" action=\"search.php?action=find\">\n";
.....................




Siguiendo entonces tus indicaciones, he vuelto a copiar el db_connection donde te he señalado justo después del "Start output. If searchable, display search box"; y funciona; lo único que supongo que hace es reabrir la conexión con la base de datos del libro de visitas y obviar las conexiones anteriores. ¿Crees que esto podría quedar así....? Me estaba preguntando que si lo que intentamos conseguir es "cerrar" las conexiones anteriores, ¿no hay alguna manera de cerrarlas sin tener que volver a "reconectar" con el db_connection? ¿quizá con un mysql_close o algo así?.
  #8 (permalink)  
Antiguo 16/02/2004, 11:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 9 meses
Puntos: 16
PHP es muy listo. Si detecta que intentas reconectarte con los mismo datos, te devuelve la misma conexion.

Aunque lo que realmente hace falta es la seleccion de la base de datos, no la reconexion. Es decir, solo tendrias que hacer el mysql_select_db() con los datos de db_connection.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 14:47.