2011-07-07 37 views
2

如果我的mysql連接在另一個包含文件中,如何在函數內部建立一個mysql連接?如何在函數內部建立一個mysql連接

這裏是mysql連接包含文件。

DEFINE ('DB_USER', 'username'); 
DEFINE ('DB_PASSWORD', 'password'); 
DEFINE ('DB_HOST', 'localhost'); 
DEFINE ('DB_NAME', 'adfg'); 

$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

if (!$dbc) { 
    trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error()); 
} 

回答

2

文件:db.php中

DEFINE ('DB_USER', 'username'); 
DEFINE ('DB_PASSWORD', 'password'); 
DEFINE ('DB_HOST', 'localhost'); 
DEFINE ('DB_NAME', 'adfg'); 

function getConnection() { 
    $dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

    if (!$dbc) { 
    trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error()); 
    } else { 
    return $dbc; 
    } 
} 

其他文件:

require_once '/path/to/DB.php'; 

$connection = getConnection(); 
var_dump($connection->host_info); 
+0

我可以把定義函數放在用戶定義的函數中嗎? – dash

+0

這不是必需的!使用常量是使用配置設置的好方法,它們是全局可用的,不需要將它們放入函數中。您可以將它們放在一個名爲config.php的額外文件中,並要求將此文件放在DB.php文件的頂部。這是設置這些變量的常用方法。 – powtac

+0

我也可以把return $ dbc;在if(!$ dbc)語句中,所以if和else語句中有一個? – dash

0

你可以做$ DBC全球內部功能....只要這兩個文件都包含它應該正常工作

@powtac:

我同意每個案例的基礎,但是如果您打算爲大型網站製作更強大的數據庫解決方案,則擁有一個類對象(名字很重要)可以成爲一個強大的工具。這並不是說你不能做同樣的事情,並使對象在函數內部的靜態變量,以防止粗心的開發人員覆蓋它:)

+0

我個人不喜歡全局DB連接器。它可以在上面的其他腳本中被覆蓋... – powtac

0

因爲你可能會打電話getConnection很多,這是有道理的使其成爲static,以便它不會被創建多次。建立在powtac的版本:

DEFINE ('DB_USER', 'username'); 
DEFINE ('DB_PASSWORD', 'password'); 
DEFINE ('DB_HOST', 'localhost'); 
DEFINE ('DB_NAME', 'adfg'); 

function getConnection() { 
    static $dbc; 

    if (!$dbc) { 
     $dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

     if (!$dbc) { 
      trigger_error ('Could not connect to MySQL.', E_USER_ERROR); 
     } 
    } 

    return $dbc; 
} 

你會那麼包括這個文件,並調用getConnection無論它的方便。

除了製作$dbcstatic以便它只創建一次之外,我還在無法建立連接時刪除了MySql錯誤消息(如果用戶可能會看到此信息,通常不建議這樣做;在開發時連接比較少見,可以現場輕鬆調試)。最後,我離開了trigger_error,並沒有用更常見的die代替它,因爲它可能是你錯誤處理框架的一部分。但是,我確實提高了錯誤嚴重性,以表示嘗試連接時出現錯誤應該是立即顯示阻止者。