Zend framework zend数据库连接

Zend framework zend数据库连接,zend-framework,zend-db,Zend Framework,Zend Db,在我们的一个项目中,application.ini中指定的数据库连接是 resources.db.adapter = Mysqli resources.db.params.host = localhost resources.db.params.username = root resources.db.params.password = '' resources.db.params.dbname = zf_tutorial 但是我需要从另一个文件调用主机、用户名、密码和数据库名。如何做到这一点

在我们的一个项目中,application.ini中指定的数据库连接是

resources.db.adapter = Mysqli
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = ''
resources.db.params.dbname = zf_tutorial

但是我需要从另一个文件调用主机、用户名、密码和数据库名。如何做到这一点?

通常,在index.php中设置与数据库的连接:

// TODO: $adapter and $params from custom place, not hardcoded
$adapter = 'pdo_mysql';
$params = array(
    'host' => 'localhost',
    'username' => 'root',
    'password' => '',
    'dbname' => 'mydb'
);
$db = Zend_Db::factory($adapter, $params);
Zend_Db_Table_Abstract::setDefaultAdapter($db);

在此代码中,$adapter和$params是硬编码的。您可以从自定义文件中获取$adapter和$params。

通常在应用程序ini中的数据库设置中调用默认适配器非常简单
$db=Zend_db_Table::getDefaultAdapter()
resources.db.isDefaultTableAdapter=true
添加到application.ini可确保调用正确的适配器。

在某些情况下,这可能无法正常工作,大多数情况下都涉及引导。

这里接受的答案不是获取db对象的好方法,应该像最初那样在application.ini中设置它

如果你想得到db对象的另一个实例,你有几个选项;您可以按照@RockyFord的建议进行操作,也可以从以下任何控制器获取db对象:-

$db = $this->getInvokeArg('bootstrap')->getResource('db');
$dbConfig = $db->getConfig();
如果您想进一步访问(我无法想象为什么您会再次需要它们),那么您可以从db对象获取它们,如下所示:-

$db = $this->getInvokeArg('bootstrap')->getResource('db');
$dbConfig = $db->getConfig();
或者实际上:-

$dbConfig = $this->getInvokeArg('bootstrap')->getResource('db')->getConfig();
这将为您提供一个包含连接数据的数组,您可以尝试此操作并执行
var\u转储($dbConfig)以查看详细信息


如果需要,这是访问db对象的一种更加健壮的方法,尽管如果需要在多个位置执行此操作,我会仔细研究您的总体代码设计,特别是如果您正在访问此处描述的连接详细信息。

您所说的“从另一个文件”到底是什么意思,我的要求是,我们有一个用普通php4编码的开源项目。我们现在计划用zend框架更新这个项目。因此,目前我们无法对其进行整体升级。所以计划一步一步地升级。因此,最初我们必须使用现有的project db连接。但是这个数据库连接是动态的。该项目进一步划分为子域,因此基于子域数据库将发生更改(用户和密码将保持不变)。因此,每个子域的数据库都会发生变化。