PDO:在哪里声明数据库连接?

时间:2013-10-14 16:48:25

标签: php mysql class pdo

我刚开始使用PDO,并想知道如何最好地声明数据库连接?

最佳做法是如下创建脚本,例如名为config.php

的config.php

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));
?>

然后有 example.class.php

<?php
include config.php;
class Example {
    public function fetch() {
          $data = $dbh->query('SELECT * FROM myTable WHERE name = ' . $conn->quote($name));
          // do stuff
    }

}
?>

为我所有课程做这个吗?或者这会形成多个连接?我希望尽可能少的连接。

3 个答案:

答案 0 :(得分:2)

您的示例看起来不错,它只会创建一个持久连接。

但是,您应该将$dbh传递给__construct的{​​{1}},然后再Example,而不是依赖$this->dbh作为全球。{ / p>

为了避免需要在所有需要访问的类中执行此操作,您可以实现一个处理数据库和其他classes inherit的类,或实现Trait

答案 1 :(得分:2)

您已关闭但fetch功能无效,因为$dbh超出了其范围。

您可以将其全球化,但更好的解决方案是在实例化时将您的处理程序传递给您的类

class Example {
    /** @var \PDO */
    protected $pdo;

    public function __construct(\PDO $pdo) {
         $this->pdo = $pdo;
    }
}
$class = new Example($dbh);

这是最佳做法。这样,设置和命名数据库指针的后勤工作就无关紧要了。您的类定义了它将如何接收它并使用您传递的指针实例。

答案 2 :(得分:0)

为了保持干净和有组织的代码,您可以创建“DbManager”类并实例化PDO,创建查询和其他方法等... 您可以使用config.php存储应用程序配置。