Zend Framework - Controller中的查询

时间:2012-02-16 15:05:34

标签: php zend-framework

我在“IndexController.php”中有以下代码:

$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是什么,或者它应该是什么,但是如果你有任何相关信息,那么如果你能启发我会很高兴。

2 个答案:

答案 0 :(得分:2)

Zend,Kohana和Codeigniter等MVC框架中的查询应该在“Model”类中完成。

不是控制器类!

模型类处理来自数据存储(如数据库或文件)的数据。

你应该在Model类中执行此操作,因为它将具有从Zend_db类扩展的所有功能

$ db是您的变量,它包含您连接到数据库的所有详细信息(主机名,用户名,通行证,数据库名称)

您必须在代码中先前定义

关于MVC的另一件事

  • 你应该有 FAT MODELS 来处理很多数据。
  • 您应该拥有管理所有流程的偏执控制器
  • 你应该有 DUMB视图哪些不能做任何重要的事情!

希望这会有所帮助:)

答案 1 :(得分: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'
));