1

ZF を学習しようとしていますが、20 分後に奇妙なエラーが発生しました :)

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'Configuration array must have a key for 'dbname' that names the database instance'

このエラーはどういう意味ですか? 構成ファイルに DB 情報を取得しました。

resources.db.adapter=pdo_mysql
resources.db.host=localhost
resources.db.username=name
resources.db.password=pass
resources.db.dbname=name

助言がありますか?

編集:

これは私のモデル ファイル /app/models/DbTable/Bands.php です。

class Model_DbTable_Bands extends Zend_Db_Table_Abstract
{
    protected $_name = 'zend_bands';
}

インデックス コントローラーのアクション:

public function indexAction()
{
    $albums = new Model_DbTable_Bands();
    $this->view->albums = $albums->fetchAll();
}

すべてのコードを編集:

ブートストラップ.php

protected function _initAutoload()
{
    $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '',
        'basePath'  => dirname(__FILE__),
    ));
    return $autoloader;
}

protected function _initDoctype()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype('XHTML1_STRICT');
}

public static function setupDatabase()
{
    $config = self::$registry->configuration;
    $db = Zend_Db::factory($config->db);
    $db->query("SET NAMES 'utf8'"); 
    self::$registry->database = $db;
    Zend_Db_Table::setDefaultAdapter($db);
        Zend_Db_Table_Abstract::setDefaultAdapter($db);
}

IndexController.php

class IndexController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        $albums = new Model_DbTable_Bands();
        $this->view->albums = $albums->fetchAll();
    }
}

configs/application.ini、変更されたデータベースおよび提供されたパスワード:

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
db.adapter = PDO_MYSQL
db.params.host = localhost
db.params.username = root
db.params.password = pedro
db.params.dbname = test

モデル/DbTable/Bands.php

class Model_DbTable_Bands extends Zend_Db_Table_Abstract
{
    protected $_name = 'cakephp_bands';

    public function getAlbum($id) 
    {
        $id = (int)$id;
        $row = $this->fetchRow('id = ' . $id);
        if (!$row) {
            throw new Exception("Count not find row $id");
        }
        return $row->toArray();    
    }
}
4

3 に答える 3

1

おそらく最終的に正しい解決策でこの議論を締めくくるために、ここに私のものがあります:

アプリケーション.ini:

resources.db.adapter = mysqli
resources.db.params.dbname = zftutorial
resources.db.params.host = localhost
resources.db.params.username = juuro
resources.db.params.password = test

文字列paramsが欠落していました。

于 2013-03-21T16:02:34.897 に答える
0

交換

public static function setupDatabase()

protected function _initDatabase()

...そしてさらに試みる

定義した静的メソッドを呼び出していないだけだと思います。ただし、保護されたメソッドを作成すると_init、ブートストラップ時に自動的に実行されます。

PS:
テストサーバーであっても、データベースのrootユーザーにパスワードを割り当てたいと思うかもしれません。ただ救うために。誰かがあなたのテストサーバーにアクセスできる場合、あなたがパスワードを持っていなければ、あなたは貴重な顧客情報を公開する可能性があります。root彼らが試みる最初のユーザーです。さらに良いのは、個々のデータベースごとに異なるユーザー/パスの組み合わせを割り当てることです。

于 2010-01-25T02:10:50.047 に答える
0

環境変数で正しい値でアプリを実行しておらず、APPLICATION_ENV代わりに構成ファイルの別の部分を読み込もうとしているようですdevelopment:production

正しい環境変数でWebアプリケーションを実行していることを確認してください

  • Apacheの場合、これをあなたの中に入れてください<virtualhost>

    SetEnvAPPLICATION_ENV開発

  • APPLICATION_ENVまた、index.phpでdevarを強制することもできます

于 2012-09-15T21:31:37.493 に答える