2014-09-25 23 views
0

我有一些困惑,我認爲提供數據庫連接到所有類文件

我試圖讓我的數據庫連接是我的類文件內可用的功能,讓我不需要把它注射到所有調用功能。我認爲這是這樣做的最巧妙的方法,但我不確定反彈

(簡體),我有3個文件

1)數據庫連接文件(使用PDO)

2)類文件,我的所有相關功能

3),這將是主要的HTML文件,其中包含所需的類和數據庫連接和啓動所需的實例文件。

我(簡體/減少)的類文件

​​

我的數據庫連接文件

// database login details 
//* Define these so that they can't be changed 
DEFINE ('DBUSER', 'xxxxx'); 
DEFINE ('DBPASS', 'xxxxx'); 
DEFINE ('DBHOST', '192.168.0.99'); 
DEFINE ('DBPORT', '3999'); 
DEFINE ('DBNAME', 'xxxxx'); 

try { 
    $db = new PDO('mysql:host='.DBHOST.'; port='.DBPORT.'; dbname='.DBNAME.'; charset=utf8', DBUSER, DBPASS);  
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


} 
catch(PDOException $ex) { 
    echo 'An Error occured! '.$ex->getMessage(); //user friendly message  
    error_log('dbconn.php failed to connect to db - Exception caught: '.$ex->getMessage()); 
    return false; 
} 
?> 

我的測試頁

<?php 
require_once('functions/dbconn.php'); 
require_once('class/products.class.php'); 

//$db = new Database(); // failed test 
$products_obj = new SPD_Products(); 

$products_obj->setCategory($CategoryID = 1); 
echo $products_obj->CategoryName; 

?> 

我試圖獲得數據庫的各種方式連接到類,但只有全局方法的作品,(我不認爲它是好的或整潔的想法...) 。上面的工作,但我想要一個更好的方式.... 我最終會有很多單獨的類文件,所以不想在每個類文件中建立一個新的連接,因爲我相信我只能做一次而不使用全球化,而不需要繼續注入並將它從功能傳遞到功能。

任何意見將不勝感激!

回答

1

這個怎麼樣,把你的登錄憑證到PHP文件:

<?php 
// database login details 
$config = array('DBUSER'=>'xxxxx', 
       'DBPASS'=>'xxxxx', 
       'DBHOST'=>'192.168.0.99', 
       'DBPORT'=>'3999' 
       'DBNAME'=> 'xxxxx'); 

?> 

然後打開dbconn.php成一類,這將使它更容易:

<?php 
class DB { 

    function __construct() { 
     //some config here 
     require_once('functions/config.php'); 
    } 

    function get_connection() { 
    try { 
    $db = new PDO('mysql:host='.$config['DBHOST'].'; port='.$config['DBPORT'].'; dbname='.$config['DBNAME'].'; charset=utf8' 
        , $config['DBUSER'], $config['DBPASS']);   
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $ex) { 
     echo 'An Error occured! '.$ex->getMessage(); //user friendly message  
     error_log('dbconn.php failed to connect to db - Exception caught: '.$ex->getMessage()); 
     return false; 
    } 

    return $db; 
    } 
} 
?> 

例子:

<?php 
class SPD_Products { 

    require_once('functions/dbconn.php'); 
    private $conn; 
    .... 
    function __construct() { 
     $db = new DB(); 
     $this->conn = $db->get_connection(); 
    } 

    public function getCategoryByCategoryID($CategoryID) { 
     try{ 
      $query = "...."; 
      $stmt = $this->conn->prepare($query);//here 
     ....... 
     } 
     catch (PDOException $ex){ 
      ..... 
      return false;  
     } 
    } 

} 
?> 

這只是Q速的方式,當然你也可以添加更多的邏輯,如檢查,如果連接是創建一個新的前開放,等等....你的想法...

+0

謝謝!我已經嘗試過,並嘗試過以前非常類似,但我不斷收到此錯誤致命錯誤:調用一個成員函數prepare()我做了$ db的連接$ this-> conn(我認爲) – Ford 2014-09-25 01:00:41

+0

糟糕,我忘了在構造函數中添加$ this再次檢查 – meda 2014-09-25 01:06:53

+0

看起來很棒!完美的作品!謝謝! – Ford 2014-09-25 01:09:46

相關問題