ユーザ用ツール

サイト用ツール


11_php:05_class:02_db_singleton

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
11_php:05_class:02_db_singleton [2015/11/06 00:40] matsui11_php:05_class:02_db_singleton [2015/11/06 07:32] (現在) matsui
行 1: 行 1:
 +====== 02 DB接続(Singleton) ======
  
 +===== DB接続Class =====
 +
 +<code php>
 +<?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);
 +    }
 +}
 +</code>
 +
 +===== 呼び出し側 =====
 +
 +<code php>
 +<?php
 +require_once('lib/Database.php');
 +Database::$conf['host']='[host_name]';
 +$dbh = Database::getDb();
 +
 +</code>
 +
 +
 +===== PHP 5.3未満の場合 =====
 +
 +static, self が利用できないので、クラス名をそのまま書く必要があります。
 +5.1, 5.3 の両環境で利用する場合は、下記のように書いておくと両方で利用する事ができます。
 +
 +<code:php>
 +<?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);
 +    }
 +}
 +</code>