ユーザ用ツール

サイト用ツール


サイドバー

このページの翻訳:



最近の更新



Tag Cloud

11_php:05_class:02_db_singleton

02 DB接続(Singleton)

DB接続Class

<?php

class Database
{
     public static $conf = array(
       'host' => '[host]',
       'db' => '[db_name]',
       'user' => '[db_user]',
       'password' => '[db_password]',
       'charset' => 'utf8',
     );

    static $_instance;
    private function __construct() {
        try{
            //$this->getConf();
            $dsn_basic = 'mysql:host=' . static::$conf['host'] . ';dbname='.static::$conf['db'];
            $this->_db = new PDO($dsn_basic, static::$conf['user'], static::$conf['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') );
            $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(Exception $e){
            echo static::$conf['host'] . " connection error";
            exit;
        }
    }
    private function __clone(){}

    public static function getDb() {
        if (!(self::$_instance instanceof self)) {
            self::$_instance = new self();
        }
        //return self::$_instance;
        return self::$_instance->_db;
    }
    
    public function query($sql) {
        return query($this->_db,$sql);
    }
}

呼び出し側

<?php
require_once('lib/Database.php');
Database::$conf['host']='[host_name]';
$dbh = Database::getDb();

PHP 5.3未満の場合

static, self が利用できないので、クラス名をそのまま書く必要があります。
5.1, 5.3 の両環境で利用する場合は、下記のように書いておくと両方で利用する事ができます。

<?php

class Database
{
     public static $conf = array(
       'host' => '[host]',
       'db' => '[db_name]',
       'user' => '[db_user]',
       'password' => '[db_password]',
       'charset' => 'utf8',
     );

    static $_instance;
    private function __construct() {
        try{
            //$this->getConf();
            $dsn_basic = 'mysql:host=' . Database::$conf['host'] . ';dbname='.Database::$conf['db'];
            $this->_db = new PDO($dsn_basic, Database::$conf['user'], Database::$conf['password'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8') );
            $this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }catch(Exception $e){
            echo Database::$conf['host'] . " connection error";
            exit;
        }
    }
    private function __clone(){}

    public static function getDb() {
        if (!(Database::$_instance instanceof self)) {
            Database::$_instance = new Database();
        }
        //return Database::$_instance;
        return Database::$_instance->_db;
    }
    
    public function query($sql) {
        return query($this->_db,$sql);
    }
}
11_php/05_class/02_db_singleton.txt · 最終更新: 2015/11/06 16:32 by matsui