2011-09-19 47 views
0

我是新來的使用函數,所以 - 沒有判斷,請;;)。數據庫連接和功能?

比方說,我有一個功能add_to_x()function.php其中執行mysql_query()。包括此功能,(include "function.php";),script.php,並在該腳本的中途調用。在function.php的頂部,我建立了一個數據庫連接,最後關閉它。

這是否會默認通過功能add_to_x()或我需要建立並關閉add_to_x()本身內的連接?


爲了說明和良好的措施:的script.php的

內容

include "function.php"; 
// Do something 
add_to_x($arg1, $arg2); 
// Do something else 

function.php內容

include "db_conn.php"; 
$conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name); 

function add_to_x($arg1, $arg2) { 
    // Do something 
    $query = "SELECT * FROM table WHERE x = '$arg1'"; 
    $result = mysql_query($query); 
} 

mysql_close($conn); 

會這樣嗎?或者,我需要做的是這樣的:

function add_to_x($arg1, $arg2) { 
    include "db_conn.php"; 
    $conn = mysql_connect($db_host, $db_user, $db_pass); mysql_select_db($db_name); 
    // Do something 
    $query = "SELECT * FROM table WHERE x = '$arg1'"; 
    $result = mysql_query($query) 
    mysql_close($conn); 
} 

它看起來是一個相當愚蠢的問題,但我不知道的連接/功能範圍。我覺得,即使第一個例子能夠工作,第二個例子也許會更好一些嗎?

任何意見,建議,答案將不勝感激! (我意識到我已經提出了這個問題有點混亂,但我希望插圖代碼有幫助,當然,如果你需要進一步澄清,請不要問)。

回答

1

可以打開定義您的功能,當你正在做的文件中的數據庫連接。但在function.php結束時關閉它是而不是你想做什麼 - 通過這樣做,你在連接被使用之前關閉連接。

您可以在主腳本的最後(在所有需要連接的函數調用之後)或根本不會(在腳本完成時隱式關閉/釋放資源)調用mysql_close()

+0

啊,這樣做更有意義。我需要在文件'function.php'(定義函數的文件)中打開它,並在'script.php'(調用它的文件)中關閉它,或者我可以在腳本中打開連接。在調用函數add_to_x()之前的任何時候都可以使用「php」,並在最後關閉它?或者是否需要在'include'function.php「'之前打開? – Avicinnian

+0

只需在使用之前打開它 - 在哪裏並不重要。所以只要它在調用'add_to_x()'之前被打開了,那麼在哪個文件中或者在哪個階段打開它並不重要。 – DaveRandom

1

這是在function.php全球範圍內(即不是一個函數內)的任何代碼,當你包括腳本將被執行。因此,在您發佈的代碼中,$conn將不再在您的add_to_x()中打開。

+0

如果連接在'script.php'中被打開,函數add_to_x()被調用(減去內部/外部連接,所以只是查詢),然後在函數運行後關閉呢? – Avicinnian

+0

這將工作 - 只要您使用'global'關鍵字訪問變量,就像jancha在他的回答中所說的那樣。 – Rijk

+0

@Rijk雖然你在技術上是正確的(最好是正確的),但應該注意的是,如果你只處理一個數據庫連接,這並不是非常必要的,因爲如果你不使用MySQL,它總是會使用最後一次使用的連接資源指定一個。無論變量的範圍如何,這都是有效 – DaveRandom

1

幾件事情需要解釋一下:
1)如果在全球範圍內定義$conn,您可以從任何功能的使用關鍵字global例如訪問

function add_to_x(){ 
    global $conn; 
} 

2)你可以使用MySQL查詢您的功能,即使連接是由「外部」,因爲MySQL將使用最後一個打開的連接器,除非其他指定

總結,首先你的例子應該工作(沒有檢查解析等)。