如何为PHP PDO创建"模式切换"?

Sch*_*iss 5 php mysql pdo amazon-rds

我目前正在使用PHP PDO访问我的数据库.这一切都非常好,花花公子.但是,我将在我的服务器设置中添加read-replicas,所以我希望相应地调整我的代码.

我目前的行动计划是存储一系列数据库凭据详细信息.为主MySQL数据库设置一个"读写"和"读取副本"的任意数量的凭据.

我想要做的是向PDO类添加一个名为"mode"的方法,其中通过模式传递,例如"read"或(default)"write".通过这个传递(例如$ dbh-> mode("read");),它可以查找随机读取副本的详细信息(不是哪个),并使用这些细节进行连接.然后,一旦我完成了从我的副本中读取,请执行另一个$ dbh-> mode("default")将其重新置于写入模式,这样我就可以使用INSERT,UPDATE等.

这可以在不破坏PDO对象并创建新对象的情况下完成吗?在对象已存在后,是否可以简单地更改连接详细信息?

到目前为止,我有以下(它几乎没有任何东西,但它开始了).

Class SwitchablePDO extends PDO
{
    public function mode($mode = "default") 
    {
        // Use the credentials for my master read and write server by default

        if($mode == "read")
        {
            // Use one the credentials for my read replicas (randomly choose)
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将不胜感激!

Lou*_*eau 2

我宁愿设置完全不同的数据库连接对象,也不愿处理模式。使用模式,你不可避免地会遇到这样的情况:一段代码没有设置模式并依赖于前一段代码的模式,并且在不同的上下文中调用时会失败。这称为顺序耦合

通过工厂方法或依赖项注入容器提供的多个对象,您可以确保每段代码都指定它需要哪个数据库连接,例如主数据库连接或从数据库连接。

作为奖励,避免使用主/从作为名称,而是使用与要执行的任务类型相关的名称,例如分析,它允许您更改将使用哪个服务器,而无需通过代码来查找所有相关部分的代码。