1

我是 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

谁能指出我正确的方向?

4

2 回答 2

3

在您的代码中有错误。您使用键“db”在注册表中设置数据库:

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

但是您尝试使用键“dadapter”检索它:

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

它应该是这样的:

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

而且这条线是没用的:

$select = $db->select();

这一行:

$SetName = "$result[2]";

可以是这样的:

$SetName = $result[2];

既然你写了这一行:

$result = $stmt->fetchAll();

您必须在循环中检索值。

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

于 2012-07-16T00:15:03.697 回答
1

首先,您可以从 bootstrap 中删除方法 _initDb() 。由于 ZF 通过阅读您的 application.ini 为您完成了这项工作

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

$db = Zend_Db_Table::getDefaultAdapter(); 
于 2012-07-16T04:57:16.467 回答