使用mysqli对象的最佳实践?

时间:2013-09-18 19:41:31

标签: php oop mysqli

我终于开始从程序PHP转换为OO PHP,从mysql_XXX转换为mysqli。我有一个关于mysqli和OOPHP的快速问题。假设我创建了一个新的mysqli对象,并希望在不同的页面上使用该对象来访问数据库。将创建的对象放入会话变量

是最佳做法
$_SESSION['dbSession'] = new mysqli('host','user','pass','database');

我可以传球,还是我应该遵循其他一些[真正的]最佳做法?

2 个答案:

答案 0 :(得分:0)

这将根据具体情况而有所不同,但我认为可以肯定地说,在会话中存储db处理程序并不是一种好的做法(额外的内存使用,不需要真正保存等等。)。

你应该看一下依赖注入,read here。这将使单元测试更容易。但是请不要将它存储在会话中。请。

答案 1 :(得分:0)

我曾经像这样创建一个数据库类作为Singleton。不是每个人都喜欢这种方法,但它很方便包装。

class Database
{
   private $_instance = null;

   public static function getInstance()
   {
      if( !(self::$_instance instanceof MySQLi) )
         self::createInstance();

      return self::_instance;
   }

   private static function createInstance()
   {
       // Create DB object here and store in self::$_instance
   }
}

显然会传递配置数据,而不是,这只是一个psudo-summary。您可以使用该类,如:

$myDb = Database::getInstance();

这将在每个单独的请求上重新创建数据库连接,但如果您在单个请求中进行多个查询,则会重复使用相同的连接。


至于将您的MySQLi对象存储在SESSION中,它将无法正常工作。您 允许序列化对象并将它们放在$_SESSION中,但有些对象是特殊的,故意不允许它。例如,如果您尝试序列化要存储在SESSION中的PDO对象,则会抛出此错误:

  

致命错误:未捕获的异常'PDOException',消息'您无法序列化或反序列化PDO实例'...