2012-02-13 127 views
1

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

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

但我需要调用从另一个文件中的主机,用户名,密码,数据库。这个怎么做?

+0

你是什么意思,完全由“从另一个文件”? – Songo 2012-02-13 11:50:45

回答

0

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

如果你想获得另一个db对象的实例,你有几个选项;你可以做@RockyFord建议,或者你可以从任何像这样的控制器db对象: -

$db = $this->getInvokeArg('bootstrap')->getResource('db'); 

如果你想走得更远,并有机会获得connection details(我无法想象,你为什么会再次需要它们),那么你可以从这样的数据库对象让他们: -

$dbConfig = $db->getConfig(); 

或者实际上: -

$dbConfig = $this->getInvokeArg('bootstrap')->getResource('db')->getConfig(); 

,这将给你包含连接数据的数组,你可以尝试此操作并执行var_dump($dbConfig);以查看详细信息。

如果需要,这是一种更加健壮的访问数据库对象的方式,但如果您需要在多个位置执行此操作,则需要花费很长时间仔细查看整个代码设计,特别是如果您按照此处所述访问连接详细信息。

+0

HI vascowhite, 我的要求是,我们有一个开源项目编码在正常的php4。我们现在计划用zend框架更新这个项目。所以目前我们不能整体升级。所以计划一步一步升级。所以最初我们必须使用现有的项目数据库连接。但是这个db连接是动态的。这个项目进一步分为子域,所以基于子域的数据库将会改变(用户和密码将保持不变)。所以db的每个子域都会改变。 – Pradeep 2012-02-14 05:34:55

0

通常情况下,连接到数据库中的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); 

在此代码$适配器和$ PARAMS是硬编码。你可以从你的自定义文件中获得$ adapter和$ params。

2
同在的application.ini调用默认的适配器您的数据库设置通常

是微不足道
$db = Zend_Db_Table::getDefaultAdapter();
添加resources.db.isDefaultTableAdapter = true到的application.ini确保你调用正确的适配器。
有很多情况下,这可能无法正常工作,其中大多数涉及自举。