2010-10-08 105 views
0

我有我的代碼中的多個PHP函數和每個函數試圖建立MySQL連接,發送查詢和關閉MySQL連接。這是一個好的設計,還是應該從主函數設置一個連接,然後將這些變量傳遞給每個函數來執行查詢?MySQL的性能要求

另外,當嘗試在func1()中執行mysql_query的第二個實例時,這段代碼是否會出錯?在func2中調用的mysql連接實例是不是獨立於func1中調用的實例?在我的代碼中,我似乎得到了不一致的行爲。有時,我收到錯誤,但是當我刷新頁面時,似乎沒有問題。任何建議,歡迎。謝謝。

def func1() { 

mysql_connect(params) 

mysql_query() 

func2() 

mysql_query() 

mysql_close() 

} 


def func2() { 

mysql_connect(params) 

mysql_query() 

mysql_close() 

} 

回答

2

我不能說這是可怕的性能打擊,但它只是沒有意義。
打算打開一次的數據庫連接。
如果你需要從盒子裏取出5個蘋果 - 你打開並關閉這個盒子5次?或者只是打開它,一次搞定? ;-)
同樣在這裏。

只需打開連接一次,永遠不會關閉它。它會自動完成。

+0

我同意你的看法,我只是太擔心讓我的代碼模塊並通過更少的變量。雖然看起來不合理,但我肯定可以通過另一個變量。 – user429113 2010-10-08 07:27:05

+0

@ user429113您可以保持模塊化。有兩種方法。一個簡單的(我個人更喜歡它):不要傳遞任何東西。所有的mysql函數默認都可以使用上次打開的連接。無需打開或傳遞任何東西。 99,9%的腳本足夠了。當你需要明確設置連接資源時,唯一的情況是當你需要2個不同的連接時。這是你的第二選擇。在一個變量存儲連接資源,並通過它(在內部,當然,你的數據庫類的內部,沒有必要將它傳遞的時候被調用其他地方的函數) – 2010-10-08 07:45:05

1

您應該使用單例創建或獲取唯一的MySQL連接,不建議使用多連接,因爲您必須「命名」每個連接並指定要使用的連接。

1

我通常用在我的項目一個單獨的連接。

//on the beginning of the file I connect to the database 
$bdconn = mysql_connect(/* params */); 

    //things to do on the page 
    {...} 
//at the end of the page I disconnect from it 
mysql_close($dbconn); 

如果你要連接到其它數據庫以及在運行,那麼你只需要連接到其他一個,但後來只是重新連接到第一個。我認爲在同一時間處理更多的數據庫是沒有用的。

+2

從您的代碼中刪除'@'因爲它是無用的,不好的做法 – 2010-10-08 07:45:59

+0

我d強烈建議您延遲連接的創建,直到您的代碼實際需要使用它時,如果您擔心性能。 (如果你打包mysql_query調用併爲連接使用一個靜態變量,這是微不足道的) – symcbean 2010-10-08 15:21:08