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);

ただし、キー「dbadapter」を使用して取得しようとします。

$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

まず、ブートストラップからメソッド _initDb() を削除できます。ZF は application.ini を読み取ることでこれを行うため、

次に、レジストリに保存する目的は、好きな場所から何かにアクセスすることであるため、データベースをレジストリに保存する必要はありません。

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