PHP使用多个MySQL数据库连接

时间:2016-06-17 11:55:37

标签: php design-patterns datamapper

我正在创建一个在不同服务器上使用3个不同数据库的应用程序。获取数据发生在我的Data mappers中,每个都扩展了一个抽象的DataMapper父类:

abstract class DataMapper {

    protected $db;
    protected $db2;
    protected $db3;

    function __construct() {
        $this->db = new Database('db1');
        $this->db2 = new Database('db2');
        $this->db3 = new Database('db3');
    }

}

但是,对于只需要这3个连接中的一个的页面来说,这会有点过分。为应用程序的每个部分返回正确的数据库连接的最佳方法是什么?我听说过应用程序注册表,但我不知道如何设置类似的东西。

1 个答案:

答案 0 :(得分:0)

我不喜欢你是如何设置数据映射器的。您正在为每个映射器创建新连接,即使它使用已建立连接的提供程序也是如此。换句话说,每个数据映射器都会创建一个新的数据库对象。

理想情况下,应保存这些数据库对象并将其传递给需要它们的数据映射器。自动注射通常效果很好。这意味着您不必使用<div class="panel"> <img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVxPtnNvc1ZwknRSdJZIPjrmUHitXdUU_-TT3wuIF-mWND6sXV" class="img-responsive" alt="picture nature"> <div class="logo"> I'm a logo </div> <h1>I'm a title, hello</h1> </div>关键字实例化对象,而是通过对象的构造参数请求它们。

例如:

new

上面,两个映射器类需要不同的提供者。您需要做的唯一事情是通过对象的构造函数指定它。剩下的就是自动依赖注入/自动装配。

我不知道您的架构是如何建立的,但这就是我所做的:路由器和注入器协同工作。路由器确定应该调用哪个控制器以及应该调用什么操作(方法)。进样器获取此信息并反映控制器的参数。它还反映了参数的参数,等等......注入器创建所有对象并决定要传递的数据库提供程序,域对象等。 Herehere是开始学习注射器的好地方,但你可能想要阅读一下。还有一些很好的轻量级DIC。