创建mysqli对象后,处理$ db_conn变量的最佳方法是什么?
我一直在使用
$GLOBALS['_sql'] = new mysqli(...);
但这看起来很脏。我见过的另一种选择是不断地将连接var传递给调用它的每个函数,但这是一个巨大的痛苦。
答案 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个选项。
就个人而言,我会选择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');
当然,您需要编写查询方法。