2012-04-17 2 views
1

Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for Zend_Session_SaveHandler_DbTable' in C:\wamp\www\hol\library\Zend\Db\Table\Abstract.php on line 755 (!) Zend_Db_Table_Exception: No adapter found for Zend_Session_SaveHandler_DbTable in C:\wamp\www\hol\library\Zend\Db\Table\Abstract.php on line 755 Call StackZend Framework: Инициализировать сессию (базы данных) Ошибка

Time Memory Function Location 1 0.0005 373664 {main}() ..\init.php:0

2 0.0325 2749720 Zend_Session_SaveHandler_DbTable->__construct( ) ..\init.php:40 3 0.0325 2750168 Zend_Db_Table_Abstract->__construct( ) ..\DbTable.php:207 4 0.0325 2750480 Zend_Session_SaveHandler_DbTable->_setup( ) ..\Abstract.php:268 5 0.0325 2750480 Zend_Db_Table_Abstract->_setup( ) ..\DbTable.php:403 6 0.0325 2750480 Zend_Db_Table_Abstract->_setupDatabaseAdapter( ) ..\Abstract.php:739

Код:

//Configuration consumption 
$config = new Zend_Config(require 'config.php'); 

//Database configuration 
$db = Zend_Db::factory($config->database->adapter, array(
    'host'  => $config->database->params->host, 
    'username' => $config->database->params->username, 
    'password' => $config->database->params->password, 
    'dbname' => $config->database->params->dbname 
)); 

$sess_config = array(
    'name'    => 'session', 
    'primary'   => array(
     'session_id', 
     'save_path', 
     'name', 
    ), 
    'primaryAssignment' => array(
     'sessionId', 
     'sessionSavePath', 
     'sessionName', 
    ), 
    'modifiedColumn' => 'modified', 
    'dataColumn'  => 'session_data', 
    'lifetimeColumn' => 'lifetime', 
); 

Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($sess_config)); 

//Initialize the session 
Zend_Session::start(); 

конфигурации

<?php 
// config.php 
return array(
    'database' => array(
     'adapter' => 'Pdo_Mysql', 
     'params' => array(
      'host'  => 'localhost', 
      'username' => 'root', 
      'password' => '', 
      'dbname' => 'hol' 
     ) 
    ), 
    'session' => array(
     'name'    => 'session', 
     'primary'   => array(
      'session_id', 
      'save_path', 
      'name', 
     ), 
     'primaryAssignment' => array(
      'sessionId', 
      'sessionSavePath', 
      'sessionName', 
     ), 
     'modifiedColumn' => 'modified', 
     'dataColumn'  => 'session_data', 
     'lifetimeColumn' => 'lifetime' 
    ) 
); 

SQL:

CREATE TABLE `session` (
    `session_id` char(32) NOT NULL, 
    `save_path` varchar(32) NOT NULL, 
    `name` varchar(32) NOT NULL DEFAULT '', 
    `modified` int, 
    `lifetime` int, 
    `session_data` text, 
    PRIMARY KEY (`Session_ID`, `save_path`, `name`) 
); 

ответ

1

вам необходимо либо позвонить Zend_Db_Table_Abstract::setDefaultAdapter($db) обеспечивая $db, который вы создали в своем примере конфигурации, поскольку, как вы видите, у вас нет установленного по умолчанию DB-адаптера с учетом ошибки, или вам нужно добавить объект $db в $sess_config, поэтому он устанавливается в качестве адаптера DB для Zend_Session.

Zend_Session_SaveHandler_DbTable расширяет Zend_Db_Table_Abstract и любые варианты, неизвестные Zend_Session_SaveHandler_DbTable (например, параметров конфигурации базы данных), затем передаются в конструктор Zend_Db_Table_Abstract который устанавливает DbTable.

Попробуйте это:

$sess_config = array(
    'db'    => $db, // Pass the $db adapter as the 'db' parameter to Zend_Db_Table_Abstract 
    'name'    => 'session', 
    'primary'   => array(
     'session_id', 
     'save_path', 
     'name', 
    ), 
    'primaryAssignment' => array(
     'sessionId', 
     'sessionSavePath', 
     'sessionName', 
    ), 
    'modifiedColumn' => 'modified', 
    'dataColumn'  => 'session_data', 
    'lifetimeColumn' => 'lifetime', 
); 
+0

По какой-то причине мой сервер Apache терпит крах при посещении страницы ... но я могу загрузить любой другой файл, например config.php, без проблем. – John

+0

@John Сбой, как в случае ошибки segfault или 500 внутренних серверов? – drew010

+0

В нем говорится, что «программа» разбилась, а затем я перенаправлен на: http://localhost.se/hol/init.php вместо обычного адреса http: //localhost/hol/init.php – John

2

Вы не отправлял содержимое вашего config.php, но на основании ошибки я подозреваю, что вы не указали fy адаптер (mysql, pdo и т. д.).

Мой конфигурационный файл выглядит примерно так (YAML):

database: 
    adapter: Pdo_Mysql 
    params: 
    host:  myhost 
    dbname: mydb 
    username: myusername 
    password: mypassword 

Согласно Zend API docs, вы должны указать адаптер, как это:

// Set this before you make the call to setSaveHandler() 
Zend_Db_Table_Abstract::setDefaultAdapter($db); 

Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($sess_config)); 
+0

Я добавил конфигурационный файл, у меня есть адаптер я вполне уверен, что – John

+0

Похоже, вы, возможно, придется добавить раздел базы данных в массив $ session_config. Ошибка «Не найден адаптер для Zend_Session_SaveHandler_DbTable», относится к массиву, который вы передали классу «Zend_Session_SaveHandler_DbTable». –

+0

Я просто сделал, посмотри мой комментарий в ответе ниже. – John

Смежные вопросы