Pregunta

Parece que voy y vengo en esto, a veces funciona para mí, a menudo no funciona y no puedo entender cómo / por qué puedo hacer que funcione a veces, y otras veces no funcionará .

Tengo 5 bases de datos y necesito obtener datos de cada una de ellas durante una rutina de mantenimiento. Para cada una de las bases de datos, tengo un archivo externo que contiene todo el código de conexión db que incluyo en mi página.

Las inclusiones se ven así

$SGcon = mysql_connect("localhost","root","");

if (!$SGcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

Para cada base de datos proporciono una variable diferente, por lo que la próxima base de datos será

$PTcon = mysql_connect("localhost","root","");

if (!$PTcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

Luego, cuando llamo a mi consulta, uso

 
mysql_query($getQuery,  $PTcon);
mysql_query($secondQuery, $SGcon);

El problema con el que me encuentro es que no estoy utilizando la base de datos correcta para la consulta, parece que mi script está utilizando las bases de datos que se agregaron a la última página.

¿Hay alguna manera mejor de cambiar la conexión de la base de datos que se va a usar?

Hay un montón de ida y vuelta entre las bases de datos, ya que estoy comparando datos de una base de datos con datos de otra, así que estoy tratando de ser eficiente con esto también.

Gracias Pete

¿Fue útil?

Solución

De forma predeterminada, si pasa los mismos argumentos a mysql_connect como una llamada anterior devolverá una conexión en caché si está disponible, en lugar de crear una nueva. Por lo tanto, ambas consultas se ejecutan en la base de datos que pasó por última vez a mysql_select_db .

Pasar new_link = true evitará este comportamiento, aunque las conexiones a la base de datos pueden ser costosas, por lo que debe tratar de mantener la menor cantidad posible de datos abiertos.

La explicación detallada de new_link:

  

Si se realiza una segunda llamada a    mysql_connect () con el mismo   argumentos, no habrá nuevo enlace   establecido, pero en cambio, el enlace   identificador del enlace ya abierto   Será devuelto. El nuevo_enlace   El parámetro modifica este comportamiento y   hace que mysql_connect () siempre abra un   nuevo enlace, incluso si mysql_connect () era   llamado antes con el mismo   parámetros En modo seguro SQL, esto   se ignora el parámetro.

Otros consejos

Creo que si cierra la conexión db entre cada consulta, resolverá el problema.

Y si está haciendo muchas comparaciones entre bases de datos, entonces solo usaría 1 instrucción select para consultar todas las bases de datos a la vez.

A menos que haya una razón específica, desea mantener las conexiones db lo más bajas posible. Usaría una conexión y escribiría un método para extender la funcionalidad del método mysql_query (). Puede pasarle la cadena SQL y el nombre de la tabla, luego la función llama a mysql_select_db ($ tableName) y reutiliza esa misma conexión para procesar el SQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top