gpt4 book ai didi

php - Zend Framework 2 中与 DB 的动态连接

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:24 25 4
gpt4 key购买 nike

我有 3 种类型的数据库:

  • Authen DB(固定地址和固定模式)

  • 配置数据库(固定地址和固定模式)

  • 服务数据库(基于每个服务的动态地址和动态架构)

用户通过Authen DB登录并验证后。

基于Config DB中的信息存储,ZF2应用程序中与服务相关的所有操作都应在相关的Service DB上完成。

ZF2 支持这种情况吗?我该如何解决这个问题?


下面的代码是我的 global.php 和 local.php。

全局.php

return array(
'db' => array(
// primary database
'driver' => 'Pdo',
'dsn' => 'mysql:host=xxx.xxx.xxx.xxx;dbname=db_authen',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
),
// other database
'adapters' => array(
'db_config' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:host=yyy.yyy.yyy.yyy;dbname=db_config',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'",
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
),
),
),
),
'service_manager' => array(
// primary database
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory'
),
// other database
'abstract_factories' => array(
'Zend\Db\Adapter\AdapterAbstractServiceFactory',
),
),
);

本地.php

return array(
'db' => array(
// primary database
'username' => '*****',
'password' => '*****',

// other database
'adapters' => array(
'db_config' => array(
'username' => '*****',
'password' => '*****',
),
),
),
);

谢谢,

最佳答案

在针对(静态配置的)Auth DB 进行身份验证并查询(静态配置的)Config DB 以获取服务 DB 所需的动态信息后,您可能可以为服务 DB 自己实例化正确的 DB 适配器,使用类似的东西:

// Config from the Config DB, packaged into an array with keys that 
// are expected by \Zend\Db\Adapter\Adapter
$config = [
'driver' => 'Pdo_Mysql', // for example
'user' => 'my-dynamically-obtained-user',
'password' => 'my-dynamically-obtained-password',
'database' => 'my-dynamically-obtained-db-name',
// etc
];
$adapter = new \Zend\Db\Adapter\Adapter($config);

// Now use the $adapter to build queries
$statement = $adapter->query('SELECT * FROM `mytable`');
$results = $statement->execute();

// iterate over the results, etc.

或者,您可以将 $adapter 提供给您创建的模型对象,该对象向消费者隐藏特定于数据库的查询详细信息。

参见 ZF2 docs for \Zend\Db\Adapter\Adapter

关于php - Zend Framework 2 中与 DB 的动态连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com