2012-08-06 62 views
-1
class mysql{ 

    function __construct(){ 
     $this->connect(); 
    } 

    function __destruct(){ 
     $mysqli = $this->connect(); 
     $mysqli->close(); 
    } 

    public function connect(){ 

     static $mysqli; 

     require_once(ROOT_PATH.'/config/db_conf.php'); 

     @$mysqli = new mysqli($sql_login['host'], $sql_login['user'], $sql_login['password'] , $sql_login['database'], $sql_login['port']); 

     if(!$mysqli){ 
      throw new Exception("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); 
     } 

     return $mysqli; 
    } 
} 

當我試圖連接到MySQL的 - 一切都很好,但之後我收到警告:mysqli::close(): Couldn't fetch mysqli in...爲什麼mysqli不起作用?

+2

你爲什麼要在析構函數中再次調用連接? – Oussama 2012-08-06 11:59:40

+2

請刪除'@'字符。你也不需要創建一個mysql類,MySQLI已經是一個「mysql」類。 – hakre 2012-08-06 12:00:08

+0

@Yazmat我是oop的新手,有人從stackoverlofw曾向我展示過。 – user1564141 2012-08-06 12:05:00

回答

3

要直接回答這個問題:

  1. 移動「靜態$ mysqli的」;成爲一個類變量「var $ mysqli;」。
  2. 將連接字符串移到構造中。 (爲什麼有一個函數只能以這種方式調用另一個函數?除非你打算再次連接=不太可能,除非你搞亂了多個連接)。
  3. 當您連接,使用類變量(而不是靜態的。失去了作爲@說hakre)
  4. 當你破壞,不重新創建一個新的連接,只需關閉你有一個(如Yazmat說) 。

但是:你有這個課程的計劃嗎? mysqli本身是一個類,可能在這個階段給你所有你需要的。我首先在增強基礎類之前先使用基類,然後在有更多想法的地方增強它,以便在其中增加額外的功能。首先保持簡單:)

+0

編輯:剛纔注意到你正在討論上面評論中重新分類mysqli的好處。 PDO是另一種選擇(我使用的一種),但是再次保持簡單,直到你知道缺點(例如構建漂亮的錯誤陷阱/報告等)時才加強。 – Robbie 2012-08-06 12:14:42