我得到了一个奇怪的问题,我甚至无法在网上找到太多答案。
代码是这样的:
$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'
));
答案 0 :(得分:1)
我想我可以看到发生了什么,但是如何或为何不清楚。
“adapter”选项似乎传递给PostgreSQL连接本身,显然它不支持。