2012-07-15 73 views
1

我是新來的Zend框架。我試圖使用Zend Registry連接數據庫,但我無法做到。使用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 

任何人都可以指向正確的方向嗎?

+0

你是什麼意思「無法」?數據庫是否限制訪問?你有適當的權限連接到數據庫?該數據庫是否與* exact *用戶和登錄憑據一起存在?你能在這裏填空嗎? – Makoto 2012-07-15 23:34:05

+0

Hi.Thanks的答覆。我只是試圖查詢它。它說最大執行時間30秒超過。是正在嘗試使用正確的登錄憑據。我不知道我需要在其他文件中的條目像.htaccess?..... – user1230541 2012-07-15 23:40:15

+0

你真的只需要在application.ini或bootstrap.php中設置你的數據庫適配器。您正在設置相同的適配器兩次。'$ db = new Zend_Config($ this-> getOption('db');'在你的引導程序中將從application.ini獲得適配器 – RockyFord 2012-07-16 04:27:10

回答

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();。沿着你的代碼移動這個函數,當你發現腳本沒有停下來,並且返回你寫的錯誤時,你發現有問題的行。

+0

嗨,很多很多謝謝你的回覆。現在我已經在application.ini中刪除了我的代碼並在indexcontroller.But中更改了$ db = Zend_Registry :: get('db');但仍然收到類似致命錯誤的錯誤:最大執行時間超過30秒C:\ xampp \ htdocs \ Firstzen \ library \ Zend \ Db \ Statement \ Pdo.php在線221.由於我是PHP的新手,我真的無法知道它是什麼。請告訴我什麼是錯誤的? – user1230541 2012-07-16 10:21:24

+0

@ user1230541 Answer updated – 2012-07-16 13:13:36

1

首先,您可以從您的引導程序中刪除方法_initDb()。由於ZF爲您完成此通過閱讀你的application.ini

第二你並不需要你的數據庫存放在註冊表自從存儲在註冊表的目的是從你喜歡的地方,可以簡單地通過

來實現訪問的東西
$db = Zend_Db_Table::getDefaultAdapter();