PHP:处理MySQL连接变量

时间:2009-12-14 03:32:05

标签: php variables mysqli globals

创建mysqli对象后,处理$ db_conn变量的最佳方法是什么?

我一直在使用

$GLOBALS['_sql'] = new mysqli(...);

但这看起来很脏。我见过的另一种选择是不断地将连接var传递给调用它的每个函数,但这是一个巨大的痛苦。

4 个答案:

答案 0 :(得分:5)

我使用的是Singleton类,我通常称之为DatabaseManager。通过创建一个名为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()即可获得数据库连接。

这种方法的优点在于它可以轻松扩展以管理与多个数据库的连接,并确保您永远不会向任何一个数据库打开多个连接。使您的连接非常有效。

答案 1 :(得分:1)

我看到它的方式,传递它的3个选项。

  • 单身人士,就像亚历克斯提出的那样。
  • 将其存储在$ _GLOBAL中。
  • 将其作为参数传递。

就个人而言,我会选择Singleton。使用$ _GLOBAL感觉不对,将其作为参数传递太烦人了。

答案 2 :(得分:0)

您是否考虑过针对您的应用采用更加面向对象的方法?如果您的PHP代码被组织成类,那么您只需要将数据库连接传递给实例一次(例如在构造函数中),然后可以在所有类的方法中轻松访问它,例如, $this->_sql

答案 3 :(得分:0)

这样的东西
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');

当然,您需要编写查询方法。