Zend Framework:连接到PostgreSQL数据库时出现“无效连接选项”适配器“错误

时间:2012-08-13 06:54:30

标签: database zend-framework postgresql connection

我得到了一个奇怪的问题,我甚至无法在网上找到太多答案。

代码是这样的:

$config = new Zend_Config_Ini('../application/configs/application.ini',
                              APPLICATION_ENV);
$db = Zend_Db::factory($config->resources->db->adapter,
                       $config->resources->db->params->toArray());
$db->setFetchMode(Zend_db::FETCH_ASSOC);
$db->query('set names utf8;');

然后我在屏幕上出现错误:

An error occurred
Application error
Exception information:

Message: SQLSTATE[08006] [7] invalid connection option "adapter"
Stack trace:

#0 /srv/uhg/ZF/library/Zend/Db/Adapter/Pdo/Pgsql.php(87): Zend_Db_Adapter_Pdo_Abstract->_connect()
#1 /srv/uhg/ZF/library/Zend/Db/Adapter/Abstract.php(459): Zend_Db_Adapter_Pdo_Pgsql->_connect()
#2 /srv/uhg/ZF/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('set names utf8;', Array)
#3 /srv/uhg/workspaces/zpe/library/Tls/Acl.php(72): Zend_Db_Adapter_Pdo_Abstract->query('set names utf8;')
#4 /srv/uhg/workspaces/zpe/application/controllers/IndexController.php(12): Tls_Acl->__construct('developer')
#5 /srv/uhg/ZF/library/Zend/Controller/Action.php(133): IndexController->init()
#6 /srv/uhg/ZF/library/Zend/Controller/Dispatcher/Standard.php(268): Zend_Controller_Action->__construct(Object(Zend_Controller_Request_Http ), Object(Zend_Controller_Response_Http), Array)
#7 /srv/uhg/ZF/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#8 /srv/uhg/ZF/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#9 /srv/uhg/ZF/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#10 /srv/uhg/workspaces/zpe/public/index.php(29): Zend_Application->run()

我也试图省略$ config中的内容:

PDO_PGSQL:配置事项

Array ( [adapter] => PDO_PGSQL
        [host] => localhost 
        [username] => postgres
        [password] =>
        [dbname] => uhg
        [default] => 1 )

当我在网上搜索时,有人建议我应该取消设置$config->resources->db->adapter(当然在将其值存储在某个地方之后),但是当我尝试这样做时它表示我不能。

这似乎只发生在postgresql中,因为它适用于MySQL数据库。

我对Posgresql很新,这可能是Postgresql的问题吗?

有人请说清楚。

干杯。

PS:

对于$ db,它导出(我将实际的数据库名称替换为xx-xxx):

object(Zend_Db_Adapter_Pdo_Pgsql)#91(12){[“_ pdoType”:protected] => string(5)“pgsql”[“_ numericDataTypes”:protected] => array(12){[0] => int(0)[1] => int(1)[2] => int(2)[“INTEGER”] => int(0)[“SERIAL”] => int(0)[“SMALLINT”] => int(0)[“BIGINT”] => int(1)[“BIGSERIAL”] => int(1)[“DECIMAL”] => int(2)[“DOUBLE PRECISION”] => int(2)[“NUMERIC”] => int(2)[“REAL”] => int(2)} [“_ defaultFmtClass”:protected] => string(21)“Zend_Db_Statement_Pdo”[“_ config”:protected] => array(10){[“adapter”] => string(9)“Pdo_Pgsql”[“host”] => string(9)“localhost”[“username”] => string(8)“postgres”[“password”] => string(0)“”[“dbname”] => string(3)“xxx-xxx”[“default”] => string(1)“1”[“charset”] => NULL [“persistent”] => bool(false)[“options”] => array(3){[“caseFolding”] => int(0)[“autoQuoteIdentifiers”] => bool(true)[“fetchMode”] => int(2)} [“driver_options”] => array(0){}} [“_fetchMode”:protected] => int(2)[“_ profileof”:protected] => object(Zend_Db_Profiler)#92(4){[“_queryProfiles”:protected] => array(0){} [“_enabled”:protected] => bool(false)[“_ filterElapsedSecs”:protected] => NULL [“_filterTypes”:protected] => NULL} [“_ defaultProfilerClass”:protected] => string(16)“Zend_Db_Profiler”[“_ connection”:protected] => NULL [“_caseFolding”:protected] => int(0)[“_ autoQuoteIdentifiers”:protected] => bool(true)[“_ allowSerialization”:protected] => bool(true)[“_ autoReconnectOnUnserialize”:protected] => bool(false)}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!

感谢大家的帮助,我找到了解决此问题的方法:

$db = new Zend_Db_Adapter_Pdo_Pgsql(array(
             'host' => 'localhost',  
            'username' => 'postgres',  
            'password' => '',  
            'dbname' => 'uhg'        
 ));

1 个答案:

答案 0 :(得分:1)

我想我可以看到发生了什么,但是如何或为何不清楚。

“adapter”选项似乎传递给PostgreSQL连接本身,显然它不支持。