使用Zend_Db数据库连接

时间:2011-02-20 21:16:57

标签: zend-framework database-connection zend-db

我正在尝试自学Zend Framework。我在使用自定义框架方面有一些丰富的经验,但从未使用过Zend。这就像试图使用带有连指手套的刀叉一样。

我已经启动并运行了一个系统。正在applition.ini文件中创建一个没有错误的数据库连接。

我的目的是尝试使用此连接到数据库来执行基本SQL。 application.ini有以下几行:

db.adapter      = PDO_MYSQL
db.params.host  = localhost
db.params.username = cpanel_dbuser
db.params.password = 123456
db.params.dbname   = cpanel_dbname

我正在尝试连接到/public/index.php

中的数据库
$config = new Zend_Config_Ini(APPLICATION_PATH . 
                              '/configs/application.ini', 'production');
$application->db = Zend_Db::factory($config->db);
Zend_Db_Table::setDefaultAdapter($db);

我得到的错误是:

Fatal error:  Uncaught exception 'Zend_Db_Exception' with message 'Adapter name must be specified in a string' in /home/path/library/Zend/Db.php:226
Stack trace:
#0 /home/path/public/index.php(32): Zend_Db::factory(Array)
#1 {main} thrown in /home/path/library/Zend/Db.php on line 226

如果我print_r配置对象

Zend_Config Object
(
    [_allowModifications:protected] => 
    [_index:protected] => 0
    [_count:protected] => 2
    [_data:protected] => Array
        (
            [adapter] => PDO_MYSQL
 /* ... more stuff ... */

根据我对教程的理解&我正在工作的PDF,如果我得到这个连接工作,我将能够在控制器的indexAction中做如下奇妙的惊奇

 $data = $this->db->fetchAll(‘SELECT * FROM table’);
 foreach ($data as $row) {
      echo $row[‘table_fieldname’];
 }

然后开始为我所拥有的表格编写模型。

在这一点上,有一个非常严重的诱惑,即切入角落,按照我已经知道的方式做到这一点,但这完全违背了学习在框架内工作的目的。

任何人都可以为我弥补差距(或者指向一个可以清除它的资源)吗?

3 个答案:

答案 0 :(得分:10)

在config目录中的application.ini文件中执行

resources.db.adapter = PDO_MYSQL
resources.db.isDefaultAdapter = true
resources.db.params.host = localhost
resources.db.params.username = username
resources.db.params.password = pwd
resources.db.params.dbname = mydatabase

并且无论何时何地您需要$ db只需

$db = Zend_Db_Table::getDefaultAdapter()

这是最好的方法。

答案 1 :(得分:2)

public function ActionnameAction()
{
    $params=array(
            'host' =>'localhost',
            'username' =>'username',
            'password' =>'password',
            'dbname' =>'database_name');

    $db = Zend_Db::Factory('PDO_MYSQL',$params);
    $sql="select * from table_name";
    $result=$db->fetchAll($sql);
 }

答案 2 :(得分:0)

如果我不记得错了,适配器区分大小写。您应该使用Pdo_Mysql。您收到的例外情况似乎与此无关。