Domanda

Mi sembra di andare avanti e indietro su questo, a volte funziona per me, spesso non funziona e non riesco a capire come / perché riesco a farlo funzionare a volte, e altre volte non lo farà .

Ho 5 database e devo prendere i dati da ciascuno di essi durante una routine di manutenzione. Per ciascuno dei database, ho un file esterno che contiene tutto il codice di connessione db che includo nella mia pagina.

Le inclusioni sembrano così

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

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

mysql_select_db("sGopen", $SGcon);

Per ogni database fornisco una variabile diversa, quindi il database successivo sarà

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

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

mysql_select_db("pTsecond", $PTcon);

Quindi quando chiamo la mia query, utilizzo

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

Il problema che sto riscontrando è che non sto usando il database corretto per la query, sembra che il mio script stia usando i database che sono stati aggiunti alla pagina per ultimo.

Esiste un modo migliore per cambiare la connessione al database da utilizzare?

Ci sono molti avanti e indietro tra i database mentre sto confrontando i dati da un db con i dati in un altro, quindi sto cercando di essere efficiente anche con questo.

Grazie Pete

È stato utile?

Soluzione

Per impostazione predefinita, se passi gli stessi argomenti a mysql_connect come una chiamata precedente restituirà una connessione memorizzata nella cache, se disponibile, anziché crearne una nuova. Pertanto, entrambe le query sono in esecuzione su qualsiasi database passato l'ultima volta a mysql_select_db .

Il passaggio di new_link = true eviterà questo comportamento, sebbene le connessioni al database possano essere costose, quindi dovresti cercare di mantenere il minor numero possibile di apertura ragionevolmente possibile.

La spiegazione dettagliata per new_link:

  

Se viene effettuata una seconda chiamata a    mysql_connect () con lo stesso   argomenti, nessun nuovo link sarà   stabilito, ma invece, il collegamento   identificatore del collegamento già aperto   sarà restituito. Il nuovo link   Il parametro modifica questo comportamento e   rende mysql_connect () sempre aperto a   nuovo collegamento, anche se mysql_connect () era   chiamato prima con lo stesso   parametri. In modalità provvisoria SQL, questo   il parametro viene ignorato.

Altri suggerimenti

Penso che se chiudi la connessione db tra ogni query risolverai il problema.

E se stai facendo molti confronti tra database, allora userei solo 1 istruzione select per interrogare tutti i database contemporaneamente.

A meno che non vi sia un motivo specifico, si desidera mantenere le connessioni db il più basse possibile. Vorrei utilizzare una connessione e scrivere un metodo per estendere la funzionalità del metodo mysql_query (). È possibile passare la stringa SQL e il nome della tabella, quindi la funzione chiama mysql_select_db ($ tableName) e riutilizza la stessa connessione per elaborare l'SQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top