2012-03-26 11 views
0

PHPで設定オブジェクトのインスタンスを共有する必要があります。 このオブジェクトには、db usernameとdb passwordが含まれています。 dbユーザーは変更できます。だから私はteオブジェクトのインスタンスを共有する必要があります。オブジェクトを共有する最も安全な方法は何ですか?PHP

例。

デフォルトのdbユーザーは「デフォルト」です。デフォルトには、dbからのSELECTデータに対する権限のみがあります。

ウェブサイトのユーザーがウェブサイトにadminとしてログインすると、dbユーザーは「admin」に変更する必要があります。管理者は、通常のユーザーとして

するとWebユーザlogges中など、SELECTする権限を持つUPDATE、DELETE、DBユーザーは、「正常」に正常に変更する必要があります私がきたなど、SELECT、UPDATEなどの権利に

を持っていますconfigインスタンスを共有します。このオブジェクトを共有する最も安全な方法は何ですか?

答えて

0

アプリケーション内のどこからでも1つのインスタンスにアクセスできるように、singleton patternを使用できます。

また、接続資格情報を保存する接続を取得、設定、および維持できる接続ハンドラとしてシングルトンを使用することをお勧めします。

例:

<?php 
class ConnectionManager 
{ 
    private $hostname; 
    private $username; 
    private $password; 

    private $connections = array(); 

    private static $instance = null; 

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

    private function __construct() 
    {} 

    public function newConnection ($name, $database) 
    { 
     // Connect to database using predefined credentials 

     $this->connections[$name] = new PDO(); 
    } 

    public function __get ($name) 
    { 
     if (!array_key_exists($name, $this->connections)) 
      die("Could not get connection: $name"); 

     return $this->connections[$name]; 
    } 
} 

// Create a new connection named database1 
ConnectionManager::getInstance()->newConnection('database1', 'database_name'); 

// Load connection database1 
ConnectionManager::getInstance()->database1->prepare("SELECT * FROM table"); 
?> 
関連する問題