2013-10-31 91 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 –