2012-02-16 140 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模型
  • 你应该有偏执控制器谁管理的所有进程
  • 你应该有哑查看它不能做什么重要的!

希望这有助于:)