2

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

我一直在使用

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

但这似乎很脏。我看到的替代方法是不断地将连接变量传递给调用它的每个函数,但这是一个巨大的痛苦。

4

4 回答 4

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()即可获取数据库连接。

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

于 2009-12-14T03:45:48.500 回答
1

在我看来,有 3 个选项可以传递它。

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

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

于 2009-12-14T03:45:55.113 回答
0

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

于 2009-12-14T03:38:43.930 回答
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');

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

于 2009-12-14T03:39:55.127 回答