2012-02-16 135 views
0

我在「IndexController.php」下面的代碼:Zend框架 - 在控制器詢問

$sql = 'SELECT * FROM ?'; 
$stmt = new Zend_Db_Statement_Mysqli($db, $sql); 
$this->view->projects = $stmt->execute(array('projects')); 

...這只是用來從數據庫中檢索所有的項目對象,並將其傳遞給視圖。 然而,當我運行此代碼,我得到了以下錯誤:

Notice: Undefined variable: db in C:\wamp\www\PROJECTS_Zend\projectManager\application\controllers\IndexController.php on line 19 

Fatal error: Call to a member function quoteIdentifier() on a non-object in C:\wamp\www\PROJECTS_Zend\projectManager\library\Zend\library\Zend\Db\Statement.php on line 181 

我不知道什麼變量db是,或者它應該是什麼,但如果你有這方面的消息,如果你能我將不勝感激開導我。

+0

是不是該模型是什麼(不是一個答案,我知道)? – PeeHaa 2012-02-16 15:08:53

+0

你的意思是我應該把這段代碼放入模型中嗎? – 2012-02-16 15:09:35

+0

在zend中我們有Model,View,Controller。我們基本上使用Model來處理數據庫相關的事情我不建議在控制器中寫入sql語句。在這種情況下你可以使用一些類。它會讓你的代碼更完美。無論如何回答你的問題,你可以把你用來初始化'$ db'對象的代碼放在一起嗎? – 2012-02-16 15:18:29

回答

1

好吧,這樣你就毀了MVC的整個M(odel)概念。

反正$ db是Zend_Db的一個實例。我建議你閱讀http://framework.zend.com/manual/en/zend.db.adapter.html

雖然這可能會導致可怕的代碼:

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'  => '127.0.0.1', 
    'username' => 'webuser', 
    'password' => 'xxxxxxxx', 
    'dbname' => 'test' 
)); 
+0

好的!所以一旦我創建這個$ db對象,我的代碼應該工作? – 2012-02-16 15:11:41

+0

我不認爲你明白:它應該在模型中,而不是你的控制器。 – 2012-02-16 15:18:33

+0

好吧所以,我將這個$ db代碼放到我的模型類的頂部?謝謝! – 2012-02-16 15:21:26

2

查詢在MVC Zend的一樣,Kohana的和笨框架應在「模型」類完成。

不是控制器類!

模型類處理來自數據存儲的數據,如數據庫或文件。

你應該這樣做的模型類,因爲它會擁有一切從Zend_Db的類擴展功能

$ DB是你的變量,它保存所有細節,以連接到你的數據庫(主機名,用戶名,傳球,數據庫名)

你在你的代碼來定義這個提早了MVC

一件事

  • 你應該處理大量數據的FAT模型
  • 你應該有偏執控制器誰管理的所有進程
  • 你應該有啞查看它不能做什麼重要的!

希望這有助於:)