2013-10-31 94 views
0

什麼是實現以下最佳方法:DB連接PHP OOP

class abc 
{ 

function xyz() 
    { 
     $PDO->Query(); //run any query 
    } 

} 

不想讓每個PDO查詢/操作連接。

如何使用公共函數,類或其他方法使數據庫連接達到上述目的。

謝謝。

我需要更新它。

不想在同一班級建立連接。連接需要從其他類/函數中導入。這個類abc不能建立連接。數據庫連接來自其他類或公共功能或任何其他好方法,這就是我正在尋找的。

+0

你可能會發現[this](http://stackoverflow.com/a/11369679/727208)與你的問題隱約相關 –

+0

謝謝我已經通過它了:) – fmask

回答

2
class abc 
{ 
    private $PDO; 

    function __construct($pdo) 
    { 
     $this->PDO = $pdo; 
    } 
    function xyz() 
    { 
     $this->PDO->Query(); //run any query 
    } 

} 
$pdo = new PDO(...); 
$foo = new abc($pdo); 
+0

我知道你會回答這個問題,以從中學習:) –

+0

創建類以簡單連接到數據庫有什麼意義?爲什麼不創建連接並將參考存儲在全局變量中? :P –

+1

我想你誤解了這個答案,在這裏沒有創建類只是爲了「連接到數據庫」。該類'abc'不適用於數據庫連接。事實上,數據庫連接是在它之外進行的,並且正在傳遞給它的構造函數。 –

-2

可以使用Singleton模式來持久連接...

class DB { 
    private $_conn = null; 

    // Make private to prevent direct object creation 
    private function __construct($config) { 
     $this->_conn = new PDO("mysql:host=".$config["host"].";port=".$config["port"].";dbname=".$config["dbname"], $config["user"], $config["password"]); 
    } 

    public static function connect($config) { 
     static $_instance = null; 
     if($_instance == null){ 
      $_instance = new DB($config); 
     } 
     return $_instance; 
    } 

    public function query ($res) { 
     $query = $this->_conn->prepare($res); 
     $query->execute(); 
     return $query; 
    } 
} 

它可以用來像這樣既可以創建PDO連接或抓住現有的PDO連接:

$db = DB::connect($config); 
$res = $db->query("SELECT * FROM table"); 
+0

每次你想要一個數據庫時調用connect有什麼意義?爲什麼不使用它? $ stmt = $ DB :: prepare()?看起來你的配置太多了 –

+0

爲什麼使用註冊表模式或全局變量來創建並保存PDO連接對象? –

+0

你不需要所有這些東西與單身。 PHP中有一個強大的運算符,即'IF'。它可以讓你按需連接,即使不用連接()也不需要excipititly –