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

Posted

技术标签:

【中文标题】PDO:在哪里声明数据库连接?【英文标题】:PDO: Where to declare the database connection? 【发布时间】: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
    


?>

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

【问题讨论】:

【参考方案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 来存储您的应用程序配置。

【讨论】:

以上是关于PDO:在哪里声明数据库连接?的主要内容,如果未能解决你的问题,请参考以下文章

PDO 连接:带有 SET NAMES / CHARACTER SET 的 UTF-8 声明?

PDO 关闭连接

PDO连接数据库及DSN详解

mysql连接选mysqli还是PDO

带有 PDO 连接的 MySQL SET

PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】