代码之家  ›  专栏  ›  技术社区  ›  Ian Baget

php:处理mysql连接变量

  •  2
  • Ian Baget  · 技术社区  · 16 年前

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

    我一直在使用

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

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

    4 回复  |  直到 16 年前
        1
  •  5
  •   zombat    16 年前

    我用的是我通常叫的单人课 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() 获取数据库连接。

    这种方法的好处在于,它可以很容易地扩展到管理到多个数据库的连接,并确保您从未有多个连接打开到任何一个数据库。使您的连接非常有效。

        2
  •  1
  •   Juan    16 年前

    在我看来,有三种选择可以让它通过。

    • 像亚历克斯提议的单身汉。
    • 将其存储在$\u Global中。
    • 作为参数传递。

    就我个人而言,我会选择单身。使用$\u global感觉不太对劲,将其作为参数传递太麻烦了。

        3
  •  0
  •   Jordan Running    16 年前

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

        4
  •  0
  •   alex    16 年前

    像这样的东西怎么样

    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');
    

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

    推荐文章