PHP - 在Zend框架2中处理多个数据库的最佳方法

时间:2013-10-26 10:44:48

标签: php mysql pdo zend-framework2 zend-db

我们正在使用带有多个数据库的Zend Framework 2创建一个Web应用程序。我有一个core数据库,可以加载所有客户的信息。该数据库包含customer表。客户表的字段是::

  1. ID
  2. 用户名
  3. 密码
  4. DATABASE_NAME
  5. CUSTOMER_NAME
  6. ...................
  7. 当客户登录时,我必须从core数据库加载他的数据库名称,然后向数据库发出查询请求。

    我也没有多个适配器,因为所有客户都有自己的数据库,我必须从customer的{​​{1}}表加载!

    我以为我会在数据库名称前加上表名。

    我在core_db尝试了这个:

    Module.php

    我已在我的"CategoryTableGateway" => function ($sm) { $dbAdapter = $sm->get("Zend\Db\Adapter\Adapter"); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Category()); return new TableGateway("databasename.category", $dbAdapter, null, $resultSetPrototype); } 中配置了默认数据库,如下所示:

    config\autoload\database.global.php

    我得到了一个例外:

        'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=core_db;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    )
    

    然后,我从Base table or view not found: 1146 Table 'core_db.databasename.category' doesn't exist. 删除了dbname=core_db

    现在,我又得到了另一个例外:

    config\autoload\database.global.php

    那么我如何在Zend Framework 2中处理这种情况。我是Zend Framework 2的新手。

    SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected :我自己解决了我的问题。

    要连接到另一个架构的表,您需要传递Edit而不是表!

    例如,

    而不是:

    TableIdentifier

    你必须这样做:

     $CategoryTableGateway = new TableGateway("category", $dbAdapter, null, $resultSetPrototype);
    

    希望它有用!

1 个答案:

答案 0 :(得分:-1)

  

当客户登录时,我必须从核心数据库加载他的数据库名称,然后向数据库发出查询请求。

这就是你做错了。

只需将所有内容保存在单个数据库中,就像世界上的电子商务网站一样。