2016-04-25 5 views
1

index.phpファイルにデータベースへのPDO接続があります。index.phpファイルにデータベース接続を書き込む

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "dbname"; 
$dbh_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
$dbh_conn->exec("set names utf8"); 
$dbh_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

私のウェブサイトのほぼすべてのページにはデータベースが必要です。また、データベースを必要としないいくつかのページがありますが、すべてのページがindex.phpから渡され、その接続が実行されるためです。私はすべてのページを意味します(データベースを必要としないものさえも)データベース接続があります。

これは悪いことですか?私はすべての構造を変更する必要がありますか?もう一度、ページの大半はデータベースを必要としますが、ほんのわずかです。それで私はうまくいくのですか?

+0

db接続を新しいファイルに追加し、db接続が必要なページに追加する - 詳細が変更されたり、何らかの形で接続を調整する必要がある場合、多くの編集を保存します – RamRaider

+0

すべてのページのDBに接続すると、データベースの接続制限を実行します。実際にDBを使用するページでのみ行う必要があります。 – Barmar

+0

@Barmarが来て、私たちのサイトはまったく同じです。制限を打つ理由は、すべてのページの接続ではありません。 –

答えて

1

コードを実行するだけでなく、DB接続用にsingletonクラスを作成する必要があります。

class DB { 
    private static $instance; 
    private $_dbh_conn = null; 

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

     return static::$instance; 
    } 

    protected function __construct() { 
     $servername = "localhost"; 
     $username = "root"; 
     $password = ""; 
     $dbname = "dbname"; 
     $this->_dbh_conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $this->_dbh_conn->exec("set names utf8"); 
     $this->_dbh_conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     $this->_dbh_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 

    public function &dbh_conn() { 
     return $this->_dbh_conn; 
    } 

    private function __clone() { } 
    private function __wakeup() { } 
} 

そして、あなたはこのファイルが含まれている場合、あなたはこのような接続を取得する必要があります:

$dbh_conn = DB::getInstance()->dbh_conn(); 

を今、あなたは$dbh_connでデータベースへの接続を持っているし、あなたがアップやったとしてそれを使用することができます今まで。唯一の違いは、このファイルを含めることができるようになりましたが、シングルトンクラスDBを使用し、特に上記の例のようにDB接続を要求しない限り、DBに接続しないことです。さらに、シングルトンクラスのデザインパターンを使用して接続を取得しているため、スクリプトの実行時に同じDB接続が得られるという利点があります。