2015-02-09 165 views
0

連接到數據庫時出現問題。連接2個數據庫

爲DB

class DB 
{ 
    public static $connect = false; 
    private $database_host = 'localhost'; 
    private $database_user = ''; 
    private $database_pass = ''; 
    private $database_db = ''; 
    private $database_type = 'mysql'; 

    function __construct($database_host, $database_db, $database_user, $database_pass) 
    { 
     $this->database_host = $database_host; 
     $this->database_db  = $database_db; 
     $this->database_user = $database_user; 
     $this->database_pass = $database_pass; 

     if (self::$connect === false) { 
      $this->connect(); 
     } 
    } 

    private function connect() 
    { 
     $dsn = $this->database_type . ":dbname=" . $this->database_db . ";host=" . $this->database_host; 

     try { 

      self::$connect = new PDO($dsn, $this->database_user, $this->database_pass, array(PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
      self::$connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      //var_dump(self::$connect); 

      if(!self::$connect) { 
      die("Cannot connect to DB");  
      } 


     } catch (PDOException $e) { 

      die("Cannot connect to DB"); 

     } 
    } 


    } 

使用的類此連接,2 DB

$connect  = new DB(_DB_HOST_, _DB_NAME_, _DB_USER_, _DB_PASS_); 
$connectSlave = new DB(_DB_HOST_, _DB_NAME_, _DB_USER_, _DB_PASS_); 

首先連接 - 好,第二個 - 致命錯誤:訪問未申報的靜態屬性:DB :: $ connectSlave

請幫幫我。

+0

您的連接變量是數據庫類的靜態屬性。這意味着它在DB類的所有實例中共享... – 2015-02-09 19:59:53

回答

1

$連接應該是一個實例變量,而不是靜態(否則它的數據庫實例之間共享):

public $connect = false; 

然後用$this->connect代替self::$connect。以下是您的課程:

class DB 
{ 
    public $connect = false; 
    private $database_host = 'localhost'; 
    private $database_user = ''; 
    private $database_pass = ''; 
    private $database_db = ''; 
    private $database_type = 'mysql'; 

    function __construct($database_host, $database_db, $database_user, $database_pass) 
    { 
     $this->database_host = $database_host; 
     $this->database_db  = $database_db; 
     $this->database_user = $database_user; 
     $this->database_pass = $database_pass; 

     if ($this->connect === false) { 
      $this->connect(); 
     } 
    } 

    private function connect() 
    { 
     $dsn = $this->database_type . ":dbname=" . $this->database_db . ";host=" . $this->database_host; 

     try { 

      $this->connect = new PDO($dsn, $this->database_user, $this->database_pass, array(PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'')); 
      $this->connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

      //var_dump(self::$connect); 

      if(!$this->connect) { 
      die("Cannot connect to DB");  
      } 


     } catch (PDOException $e) { 

      die("Cannot connect to DB"); 

     } 
    } 
    } 
+0

刪除靜態屬性?幫助,你可以,請修復代碼.. – Alex 2015-02-09 20:09:39

+0

我已經做了。在$ connect聲明中刪除「static」關鍵字,並使用$ this-> connect代替self :: $ connect – nXu 2015-02-09 20:19:04

+0

是的,謝謝,這個工作正常 – Alex 2015-02-09 20:21:22