簡體   English   中英

PHP:處理MySQL連接變量

[英]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種傳遞方式。

  • 像alex一樣,提出了Singleton。
  • 將其存儲在$ _GLOBAL中。
  • 將其作為參數傳遞。

就個人而言,我會和辛格爾頓一起去。 使用$ _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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM