【问题标题】:Map URL to MySQL databases将 URL 映射到 MySQL 数据库
【发布时间】:2009-01-31 02:12:03
【问题描述】:

我有兴趣同时提供hosted and SaaS version of my application。现在,SOers 建议我map the URLs to MySQL databases。我能想到的是这样的

  1. companya.mysoft.com 将具有以名称 companya* 开头的 MySQL 数据库。即,compana_mydb
  2. companyb.mysoft.com 将拥有以 companyb*.i.i.e.companyb_mydb 开头的 MySQL 数据库
  3. 等等。

通过这种方式,创建新的公司帐户和进行维护更容易。

现在,是否可以在 Apache 配置文件和 MySQL ini 和 PHP ini 文件内部调整所有这些设置? (我正在使用 Apache、MySQL 和 PHP)。 我最好不要更改我的应用程序

编辑: MySQL 不支持 user-specified database-specific directories。更改问题以反映这一点。

Edit2: 有人建议我编辑 PHP 应用程序以检查子域并选择正确的数据库。但这意味着调整托管代码以满足 SaaS 版本。 所以基本上我们会有两个代码版本,一个用于托管,另一个用于 SaaS,这不是我想要的。如果一切都通过配置文件完成会更好,这样我就只有一个版本的代码。

【问题讨论】:

    标签: php mysql apache


    【解决方案1】:

    如果您正确设置 PHP 应用程序(可能使用某种类型的 MVC 设计模式或框架),您可以在一个地方指定该请求中所有后续 mysql 函数要使用的数据库名称。然后只需检查请求标头,获取(并验证)公司/数据库名称前缀,并在 mysql_select_db 函数中使用它。

    【讨论】:

    • 谢谢,但这意味着调整托管代码以满足 SaaS 版本。所以本质上我们会有两个代码版本,一个用于托管,另一个用于 SaaS,这不是我想要的。
    • 既然您已经在查看请求标头,请查看该 url 是否与 SaaS 域匹配,然后是否符合我上面的说明,否则使用无前缀的数据库名称。不需要 2 个代码库。
    【解决方案2】:

    您无法从 Apache 的配置创建供 PHP 使用的数据库连接。必须从 PHP 代码中创建数据库连接,这可以执行检查标头(请求使用的域)之类的操作,或检查您创建的配置文件并指定您是在运行 SaaS 还是托管版本。

    【讨论】:

      【解决方案3】:

      为什么需要在 INI 文件中执行此操作?我只想让您的 PHP 数据库类首先解析 $_SERVER['SERVER_NAME'] (或其他等效项)以找出您所在的子域,然后从那里选择相应的数据库。

      如果您在数据库函数中使用 PDO 或 mysqli(并且您应该使用),则必须在构造函数调用中指定 db 名称,因此您可以在创建该对象之前执行此检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        • 2012-10-03
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 1970-01-01
        相关资源
        最近更新 更多