2012-10-31 70 views
0

使用此:數據庫連接到

$db = mysqli_connect 
(
    $db_host, 
    $db_user, 
    $db_pwd 
) or die ("FATAL ! : The server ".$db_host." is not responding to ".$db_user."!"); 

如何得到$ DB值到這個類(從包括 「class.php」) - 沒有錯誤;-)

class User 
{ 
    public $db; 
    public $id; 

    public function getUser() 
    { 
     if($this->id) 
     { 
      $sql = " 
      SELECT 
       users.* 
      FROM 
       users 
      WHERE 
       users.u_id='".$this->id."' 
      "; 
      $res = mysqli_query($db, $sql) or die(mysqli_error($db)); 
      $user_row = mysqli_fetch_object($db, $res); 
      return $user_row; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    } // end class User 

我得到的全部是 - 沒什麼。如果我停止使用該類,一切都很好(不會爲用戶顯示數據;-))

+0

老實說,只需要創建一個數據庫類和擴展這些模型關閉它。不需要這些額外的步驟。或者如果你有多個數據庫,請設置一個「singleton」或「factory」模式並靜態調用它。 – wesside

回答

0

當您實例化類(User)時,如果您已經分配了變量($ DB)...你可以做

$user = new User; 
$user->db = $db; 
$user->getUser(); 

是和你的類中當你引用其方法的類的屬性,使用$this符號...即改變$db$this->db

應該工作。你提到了一些關於抑制錯誤的問題,這是一個不同的問題。我不確定你的目標是什麼,但是在類實例化之前,正常的異常處理就足夠了。

+0

工作就像一個魅力。 我當然知道需要一個更優雅的(得到它;-))正確的方法。 將在**下一個**發佈.. – osomanden

+0

你應該注意到其他答案寫的一些類,我只堅持我認爲的問題是。他們在嘗試將連接移動到課堂內部時是正確的。這是一個更完整的解決方案。很高興你有你想要的東西。 – NappingRabbit

1

您必須實例化您的班級,並且您必須使用$this運算符來訪問班級成員。 Futhermore,最好是注射建設和使用參數:

class User 
{ 
    private $db; 

    public function __construct($db) 
    { 
     $this->db = $db; 
    } 

    public function getUser($id) 
    { 
     if($id) 
     { 
      $sql = " 
      SELECT 
       users.* 
      FROM 
       users 
      WHERE 
       users.u_id=" . (int)$id ; 

      $res = mysqli_query($this->db, $sql) or die(mysqli_error($this->db)); 
      $user_row = mysqli_fetch_object($this->db, $res); 
      return $user_row; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

用法:

$user = new User($db); 
$userdata = $user->getUser(2); 
+0

mysqli_fetch_object($ db,$ res);這也需要$這 – GBD

+0

@GBD:謝謝你,更新 – JvdBerg