【问题标题】:How to handle multiple databases with single PDO instance?如何使用单个 PDO 实例处理多个数据库?
【发布时间】:2016-08-19 22:37:54
【问题描述】:

我有点问题。我写了一个PDO 包装器,它允许我对我的数据库执行查询。

现在我的应用程序是多租户的,这意味着我需要不同的数据库。数据源结构的结构如下:

(1) Main Db 

(n) Tenant DB

所以我有一个包含我所有公司的主数据库,以及我有登录凭据和用户公司信息的 n 个数据库。

当我的应用程序启动时,我像这样调用我的数据库包装器:

$this->db = new Database('host', 'name', 'user', 'pass');

whis 将在我的index.php 中使用我的默认配置创建一个实例。当我的用户登录时,我将他数据库的连接设置存储到一个全局变量中。

现在的问题是我需要在某个时候使用我的 config.php 数据库凭据,所以我需要在每个模型方法中一次又一次地重新声明数据库对象。这种情况很痛苦。

我能做些什么来解决这个问题?

【问题讨论】:

  • 如果各种数据库都在系统数据库服务器上,并且您可以使用相同的用户/密码授予对它们的访问权限,那么您可以执行select dbname.tablename.field, otherdb.othertable.otherfield from dbname.table ... 类型的东西。但是,如果它们是不同的数据库(例如 mysql 和 postgres),并且/或者您需要为每个数据库使用不同的凭据,那么您将必须拥有两个以上的 pdo 对象。
  • 不错的解决方案,但如果我有不同的服务器场?

标签: php pdo


【解决方案1】:

如果 mysql 用户可以访问这两个数据库,那么只需将数据库名称添加到表名称之前:

SELECT id,name FROM database_name.users_table

如果您需要以其他用户身份登录,那么是的,您需要创建一个新的 PDO 实例。

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多