在我们的一个项目中,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
但是我需要从另一个文件中调用主机,用户名,密码和dbname。怎么做?
答案 0 :(得分:2)
通常在application.ini中使用数据库设置调用默认适配器是微不足道的
$db = Zend_Db_Table::getDefaultAdapter();
将resources.db.isDefaultTableAdapter = true
添加到application.ini可确保您正在调用正确的适配器
在某些情况下,这可能无法正常工作,其中大多数都涉及自举。
答案 1 :(得分:1)
通常,在index.php中设置与DB的连接:
// 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。
答案 2 :(得分:0)
这里接受的答案不是获取db对象的好方法,它应该像你原来那样在application.ini中设置。
如果你想获得db对象的另一个实例,你有几个选项;你可以像@RockyFord建议的那样做,或者你可以从任何这样的控制器中获取db对象: -
$db = $this->getInvokeArg('bootstrap')->getResource('db');
如果你想进一步访问connection details(我无法想象为什么你会再次需要它们),那么你可以从db对象中获取它们: -
$dbConfig = $db->getConfig();
或确实: -
$dbConfig = $this->getInvokeArg('bootstrap')->getResource('db')->getConfig();
这将为您提供包含连接数据的数组,您可以尝试此操作并执行var_dump($dbConfig);
查看详细信息。
如果需要,这是一种更健壮的访问db对象的方法,但如果你需要在多个地方执行此操作,我会仔细查看整体代码设计,尤其是在访问时这里描述的连接细节。