2017-03-16 51 views
0

我正在使用類來完成所有與數據庫相關的工作。在配置文件中包含一個具有「連接」功能的類,以建立與數據庫的連接。我創建了一個連接文件,其中包含連接到數據庫的信息。現在爲了從特定表中檢索數據,我調用了相同的類和'查詢'功能。但是在Query函數中,我需要Connect函數的$ conn。面向對象方面我有點虛弱。任何人都可以指導我如何做這項工作。我在下面包含了我的文件config.php,connection.php和index.php文件。如何使用類中的PDO連接工作

config.php page 

<?php 
class DBConnection{ 
    public function __construct(){ 
    } 
    public function Connect(){ 
     try { 
      $conn = new PDO('mysql:host='.$this->server_name.';dbname='.$this->db,$this->user, $this->pass); 
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

     } catch (Exception $e) { 
      echo 'ERROR: ' . $e->getMessage(); 
     } 
    } 

    static public function Query($sql){ 
     return $conn->prepare($sql); 
    } 
} 

connection.php page 

<?php 
require_once('config'); 

$default=array(
    'DB_SERVER'=>'Localhost', 
    'DB_USER'=>'root', 
    'DB_PASS'=>'', 
    'DB_NAME'=>'hqe'  
    ); 

$m_db = new DBConnection(); 
$m_db->server_name=$default['DB_SERVER']; 
$m_db->user=$default['DB_USER']; 
$m_db->pass=$default['DB_PASS']; 
$m_db->db=$default['DB_NAME']; 

$m_db->Connect(); 

index.php page 

<?php 
include("connection.php"); 
$usr = DBConnection::Query("Select id, first_name, last_name from tbl_user"); 

回答

1

首先,Connect()是一個成員函數,而Query($sql)是靜態函數。我會建議以相同的方式定義,既可以是成員也可以是靜態的。

Next $conn需要從兩種方法都可以訪問,所以在Connect()中使其成爲類變量而不是局部變量。

這裏是沒有靜態函數/變量的一個版本:

<?php 
class DBConnection{ 

    private $conn; 

    public function __construct(){ 
    } 
    public function Connect(){ 
     try { 
      $this->conn = new PDO('mysql:host=localhost;dbname=hqe', 'root', ''); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

     } catch (Exception $e) { 
      echo 'ERROR: ' . $e->getMessage(); 
     } 
    } 

    public function Query($sql){ 
     return $this->conn->prepare($sql); 
    } 
} 

正如你所看到的,成員變量使用$this訪問。此外,您還需要該課程的一個對象才能撥打Query()。喜歡的東西:

$c = new DBConnection(); 
$c->Query("Select id, first_name, last_name from tbl_user"); 

這裏是所有被定義爲靜態版本:正如你所看到的,靜態變量是使用self::訪問

<?php 
class DBConnection{ 

    private static $conn; 

    public function __construct(){ 
    } 
    public static function Connect(){ 
     try { 
      self::$conn = new PDO('mysql:host=localhost;dbname=hqe', 'root', ''); 
      self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      self::$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

     } catch (Exception $e) { 
      echo 'ERROR: ' . $e->getMessage(); 
     } 
    } 

    static public function Query($sql){ 
     return self::$conn->prepare($sql); 
    } 
} 

+0

我試過定義私人$ conn。但它沒有工作。 – sanin

+0

我再次將連接文件中的數據庫名稱,用戶名和密碼傳遞給config.php – sanin

+0

:您將$ conn聲明爲局部變量,這就是爲什麼它不能在其他方法中訪問。 –