如何通过为整个项目创建一个PDO实例来减少数据库连接

时间:2014-05-01 13:15:42

标签: php pdo

我的课程看起来像这样:

class Database 
{
    const DB_HOST = "localhost";
    const DB_NAME = "office";
    const DB_USERNAME = "root";
    const DB_PASSWORD = "root";
    public $connection;

    function Database()
    {
        $this->connection = new PDO("mysql:host=".Database::DB_HOST.";dbname=".Database::DB_NAME, Database::DB_USERNAME, Database::DB_PASSWORD);
    }
}

我想使用$database = new Database();

为数据库使用单个实例

我的问题是功能找不到它。

我宁愿不使用GLOBAL $database也不要使用$_SESSION来解决它。

我错过了其他任何方式?

2 个答案:

答案 0 :(得分:0)

你可以做的是制作一个Singleton类 但是因为PDO使用来自池的连接,所以构建新的PDO非常非常轻量级,我认为这只是重建新PDO(或数据库)的一个好习惯

class Database {

    private static $instance = null;

    private __construct() {

    }

    public static function getInstance() {
      if(self::$instance === null) {
         self::$instance = new Database();
      }
      return self::$instance;
    }
}

您可以使用

到达该对象
$database = Database::getInstance(); //this wil not construct a new Database object

仍然我真的不鼓励这种方法,因为构建一个新的PDO对象是如此轻量级,你甚至不会注意到差异

更多信息,请访问 http://en.wikipedia.org/wiki/Singleton_pattern

只是发布PDO的一个例子 请参阅:How to close a PDO handle

for($i = 0; $i < 1000; $i++) {
   //This happens somewhere in the loop
   $pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
                     PDO::ATTR_PERSISTENT => true
                 ));
   //use $pdo
   unset($pdo); //This will release your connection and returns it to the pool
}

答案 1 :(得分:-1)

你想在这里使用构造函数

class Database 
    {
        public $conn;
        public function __construct()
        {
            $DB_HOST = '';
            $DB_NAME = '';
            $DB_USERNAME = '';
            $DB_PASSWORD = '';
            $this->conn= new PDO("mysql:host=".$DB_HOST.";dbname=".$DB_NAME, $DB_USERNAME, $DB_PASSWORD);
        }
    }