Modifica del DB collegato
-
06-07-2019 - |
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
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 rendemysql_connect ()
sempre aperto a nuovo collegamento, anche semysql_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.