【发布时间】:2010-12-26 07:21:34
【问题描述】:
创建 mysqli 对象后,处理 $db_conn 变量的最佳方法是什么?
我一直在用
$GLOBALS['_sql'] = new mysqli(...);
但这似乎很脏。我见过的替代方法是不断将连接变量传递给调用它的每个函数,但这是一个巨大的痛苦。
【问题讨论】:
标签: php variables mysqli globals
创建 mysqli 对象后,处理 $db_conn 变量的最佳方法是什么?
我一直在用
$GLOBALS['_sql'] = new mysqli(...);
但这似乎很脏。我见过的替代方法是不断将连接变量传递给调用它的每个函数,但这是一个巨大的痛苦。
【问题讨论】:
标签: php variables mysqli globals
我使用通常称为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() 即可获取数据库连接。
这种方法的美妙之处在于它可以轻松扩展以管理与多个数据库的连接,并确保您永远不会打开多个连接到任何一个数据库。让您的联系非常高效。
【讨论】:
在我看来,传递它的方式有 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');
当然你需要编写一个查询方法。
【讨论】: