使用Zend Registry连接到数据库

时间:2012-07-15 23:25:09

标签: php zend-framework

我是Zend框架的新手。我正在尝试使用Zend Registry连接数据库,但我无法。

这是我的引导类。

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {
     public function _initDb(){
         $db = new Zend_Db_Adapter_Pdo_Mysql(
            array(
                'host' => 'localhost',
                'username' => 'ragn',
                'password' => 'app',
                'dbname' => 'apple'
            )
        );
        Zend_Db_Table_Abstract::setDefaultAdapter($db);
        Zend_Registry::set('db', $db);
    }
}
?>

这是我的IndexController课程。

class IndexController extends Zend_Controller_Action {


    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {


        $db = Zend_Registry::get('dbadapter');
        $select = new Zend_Db_Select($db);
        $select = $db->select();
        $select = $db->select() -> from(
            array('client' => 'client'),
            array ('idclient')) -> join(array('apartmentclient' => 'apartmentclient'),
            'client.idclient = apartmentclient.idclient',
            array ('idapartment')) -> join(array('description' => 'description'),
            'apartmentclient.idapartment = description.idapartment',array ('title'));
        $stmt = $select->query();
        $result = $stmt->fetchAll();
        $Settext = array();
        $SetName = array();
        $SetName = "$result[2]";
        $Settext = "Hi!Can you please provide feedback for the apartment";
        $this->view->Settext = $Settext." ".$SetName;    

    }
}

我也有详细的application.ini文件。

resources.db.adapter = PDO_MYSQL
resources.db.isDefaultAdapter = true
resources.db.params.host = localhost
resources.db.params.username = ragn
resources.db.params.password = app
resources.db.params.dbname = apple

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:3)

在您的代码中出现错误。您可以使用密钥“db”在注册表中设置数据库:

Zend_Registry::set('db', $db);

但您尝试使用密钥'dbadapter'检索它:

$db = Zend_Registry::get('dbadapter');

应该是这样的:

$db = Zend_Registry::get('db');

此外这条线无用:

$select = $db->select();

这一行:

$SetName = "$result[2]";

可以是这样的:

$SetName = $result[2];

既然你写了这一行:

$result = $stmt->fetchAll();

你必须在循环中检索值。

要发现错误,您必须使用调试器,但如果您不知道如何使用它,最简单的方法是使用函数die();。沿着您的代码移动此函数,当您发现脚本没有停止并返回您编写的错误时,您发现了有问题的行。

答案 1 :(得分:1)

首先,您可以从引导程序中删除方法_initDb()。由于ZF通过阅读你的application.ini

为你做这件事

其次,您不需要将数据库存储在注册表中,因为存储在注册表中的目的是从您喜欢的任何地方访问某些内容,只需通过

即可实现。
$db = Zend_Db_Table::getDefaultAdapter();