Zend Framework: Zend_DB Fehler
Ich versuche zu lernen, ZF, bekam aber seltsamer Fehler nach 20 Minuten 🙂
Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'Configuration array must have a key for 'dbname' that names the database instance'
Was hat dieser Fehler zu bedeuten? Ich habe DB-information in meiner config-Datei:
resources.db.adapter=pdo_mysql
resources.db.host=localhost
resources.db.username=name
resources.db.password=pass
resources.db.dbname=name
Irgendwelche Vorschläge?
EDIT:
Dies ist meine Modell-Datei /app/models/DbTable/Bands.php:
class Model_DbTable_Bands extends Zend_Db_Table_Abstract
{
protected $_name = 'zend_bands';
}
Index-controller-action:
public function indexAction()
{
$albums = new Model_DbTable_Bands();
$this->view->albums = $albums->fetchAll();
}
BEARBEITEN
Alle codes:
bootstrap.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, Datenbank geändert und bereitgestellt Passwort:
[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
models/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();
}
}
Kann man den code, wo Sie instanziieren der db-adapter? Der code vor und einschließlich
Hier sind Sie, Funktion 🙂 public static function setupDatabase() { $config = self::$registry->Konfiguration; $db = Zend_Db::factory($config->db->adapter $config->db->toArray()); $db->query("SET NAMES 'utf8'"); self::$registry->database = $db; Zend_Db_Table::setDefaultAdapter($db); } PS ich weiß nicht, wie zu zählen-code im Kommentar, wer kann es lösen?
Darüber hinaus ist die config-Infos, die Sie zeigen, ist die wörtliche info? Wenn dem so ist, ich glaube nicht, dass der name Ihrer Datenbank ist
Der code sieht ok aus. Siehe meine vorherigen Annahmen. (Benutze backticks ` code für Kommentare.)
Das ist mein test-server db-name ist zend, Benutzername ist root ohne Passwort. Habe keine Ahnung, was falsch sein könnte mit ihm. Irgendwelche Ideen?
Zend_Db::factory( /* your config settings */ )
(vermute ich)Hier sind Sie, Funktion 🙂 public static function setupDatabase() { $config = self::$registry->Konfiguration; $db = Zend_Db::factory($config->db->adapter $config->db->toArray()); $db->query("SET NAMES 'utf8'"); self::$registry->database = $db; Zend_Db_Table::setDefaultAdapter($db); } PS ich weiß nicht, wie zu zählen-code im Kommentar, wer kann es lösen?
Darüber hinaus ist die config-Infos, die Sie zeigen, ist die wörtliche info? Wenn dem so ist, ich glaube nicht, dass der name Ihrer Datenbank ist
name
ist es? Ändern, zu vertreten, den Namen Ihrer Datenbank. (zusammen mit Benutzername und Kennwort für die Anmeldeinformationen natürlich)Der code sieht ok aus. Siehe meine vorherigen Annahmen. (Benutze backticks ` code für Kommentare.)
Das ist mein test-server db-name ist zend, Benutzername ist root ohne Passwort. Habe keine Ahnung, was falsch sein könnte mit ihm. Irgendwelche Ideen?
InformationsquelleAutor Sergio E. | 2010-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht endlich Schluss dieser Diskussion mit der richtigen Lösung, hier ist meins:
Anwendung.ini:
Den string
params
fehlte.InformationsquelleAutor Juuro
Ersetzen
public static function setupDatabase()
Mit
protected function _initDatabase()
...und versuchen Sie es erneut
Ich nehme an, Sie sind einfach nicht den Aufruf der statischen Methode, die Sie definiert haben. Aber wenn Sie erstellen Sie eine protected-Methode, beginnend mit
_init
es wird automatisch ausgeführt, wenn das bootstrapping.PS.:
Sie wahrscheinlich wirklich wollen, vergeben Sie ein Passwort für den root-Benutzer der Datenbank, auch wenn es ein test server. Nur zu sparen. Wenn jemand in der Lage, Zugriff auf Ihren testserver, könnten Sie setzen wertvolle Kunden info, wenn Sie nicht über ein Passwort.
root
ist der erste Benutzer, Sie werden es versuchen. Noch besser wäre es, weisen Sie einem anderen Benutzer/Passwort-Kombi zu jeder einzelnen Datenbank.resources.db.adapter=pdo_mysql resources.db.host=localhost resources.db.username=root resources.db.password= resources.db.dbname=zend
Immer noch der gleiche 🙂
InformationsquelleAutor Decent Dabbler
Scheint, dass Sie nicht mit der app mit dem richtigen Wert in der
APPLICATION_ENV
Umfeld var und dann versucht es zu laden, um einen anderen Teil der config-Datei stattdevelopment:production
Überprüfen Sie, dass der Betrieb Ihrer web-Anwendung unter der richtigen Umgebung var
Für Apache setzen dies in Ihrem
<virtualhost>
SetEnv APPLICATION_ENV development
Sie können auch versuchen, zu zwingen, de
APPLICATION_ENV
var in Ihrem index.phpInformationsquelleAutor Maks3w