2009-06-18 111 views
0

我似乎在這個問題上來回回顧,有時它適用於我,往往不適用,而且我無法弄清楚爲什麼有時我可以使用它以及在其他時間它不會。更改連接的數據庫

我有5個數據庫,並且需要在維護例程中從他們每個人那裏獲取數據。 對於每個數據庫,我有一個外部文件,其中包含我在頁面中包含的所有數據庫連接代碼。

的包括這個樣子

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

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

mysql_select_db("sGopen", $SGcon); 

對於每個數據庫我提供了一個不同的varaible,所以接下來的數據庫將

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

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

mysql_select_db("pTsecond", $PTcon); 

然後當我打電話給我詢問,我用

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

我遇到的問題是我沒有得到用於該曲目的正確數據庫ery,看來我的腳本正在使用最後添加到頁面的數據庫。

有沒有更好的方式來切換數據庫連接使用?

數據庫之間有很多來回的數據,因爲我將數據從一個數據庫與另一個數據庫進行比較,所以我試圖對此有效。

感謝 皮特

回答

1

默認情況下,如果您將先前調用的相同參數傳遞給mysql_connect,它將返回緩存連接(如果可用),而不是創建新連接。因此,兩個查詢都針對您最後傳遞給mysql_select_db的任何數據庫運行。

傳遞new_link=true將避免這種行爲,雖然數據庫連接可以是昂貴的,所以你應該儘量保持少開在合理的範圍。

爲new_link詳細的說明:

如果再次調用 mysql_connect()由具有相同 論點,沒有新的鏈接將被 建立,而是已經打開的鏈接 標識符鏈接 將被退回。該new_link 參數改變此行爲 使得mysql_connect()總是打開一個新的 鏈接,即使mysql_connect()是 具有相同 參數之前調用。在SQL安全模式下,這個 參數被忽略。

1

我覺得如果你關閉每個查詢之間,將解決問題的數據庫連接。

如果你做了很多的數據庫之間進行比較的話,我只想用1條select語句一次查詢所有的數據庫。

+0

這不是一個非常好或高性能的方法。如果您出於任何原因在查詢中交錯數據庫源,則這可能不實用。 – cletus 2009-06-18 22:30:58

+0

我認爲這個問題是由於緩存。無論如何,不​​用數據庫時打開數據庫也不表現。 – Sev 2009-06-18 22:39:42

1

除非有特定的原因,否則您希望保持db連接儘可能低。我會使用一個連接,並編寫一個方法來擴展mysql_query()方法的功能。您可以將它傳遞給SQL字符串和表名,然後函數調用mysql_select_db($ tableName)並重新使用相同的連接來處理SQL。