【问题标题】:PDO: Where to declare the database connection?PDO:在哪里声明数据库连接?
【发布时间】:2013-10-22 07:23:16
【问题描述】:

我刚开始使用 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
    }

}
?>

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

【问题讨论】:

    标签: php mysql class pdo


    【解决方案1】:

    您已接近,但您的 fetch 函数将无法工作,因为 $dbh 超出了其范围。

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

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

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

    【讨论】:

      【解决方案2】:

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

      但是,您应该将$dbh 传递给Example__construct,稍后再执行$this-&gt;dbh,而不是依赖$dbh 是一个全局变量。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2021-01-20
          • 2018-10-11
          • 2017-03-09
          • 1970-01-01
          • 2013-01-08
          • 2015-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多