[英]PHP: Dealing With MySQL Connection Variable
創建mysqli對象后,處理$ db_conn變量的最佳方法是什么?
我一直在用
$GLOBALS['_sql'] = new mysqli(...);
但這似乎很臟。 我看到的替代方法是不斷將連接var傳遞給調用它的每個函數,但這是一個巨大的痛苦。
我使用通常稱為DatabaseManager
的Singleton類。 通過創建一個稱為getDB()
的靜態公共方法,我無需擔心傳遞數據庫的getDB()
,因為它可以在任何地方使用。 這是一個簡短的存根:
class DatabaseManager
{
private static $instance;
private $db_connection;
public initDBConnection($connectionInfo) {
//make connection
}
public static function getInstance()
{
if (self::$instance == null) {
$className = __CLASS__;
self::$instance = new $className();
}
return self::$instance;
}
public static function getDB()
{
return self::getInstance()->db_connection;
}
}
初始化數據庫連接后,只需調用DatabaseManager::getDB()
即可獲取數據庫連接。
這種方法的優點在於,它易於擴展以管理與多個數據庫的連接,並確保您對任何一個數據庫打開的連接都不會超過一個。 使您的連接非常高效。
我的看法是,有3種傳遞方式。
就個人而言,我會和辛格爾頓一起去。 使用$ _GLOBAL感覺並不正確,將其作為參數傳遞實在太煩人了。
您是否考慮過對應用程序采用更面向對象的方法? 如果您的PHP代碼被組織成類,那么您只需要將數據庫連接傳遞到實例一次(例如,在構造函數中),然后可以在該類的所有方法(例如$this->_sql
)中輕松訪問它。
怎么樣
class Db {
public static function factory() {
return new Db();
}
public function __construct() {
// Set up DB connection here
}
}
用法像
Db::factory()->query('DELETE FROM users WHERE active = 0');
當然,您需要編寫查詢方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.