Php 为什么会出现此错误?如何修复?
我编写了一个PHP脚本,用于从Oracle数据库中提取查询并将结果写入csv文件。我正在使用Zend Framework连接到数据库。我知道凭据是正确的,因为我能够使用SQLPlus通过终端进行连接 这就是错误:Php 为什么会出现此错误?如何修复?,php,oracle,zend-framework,tns,Php,Oracle,Zend Framework,Tns,我编写了一个PHP脚本,用于从Oracle数据库中提取查询并将结果写入csv文件。我正在使用Zend Framework连接到数据库。我知道凭据是正确的,因为我能够使用SQLPlus通过终端进行连接 这就是错误: Zend\u Db\u Adapter\u异常:SQLSTATE[HY000]:pdo\u oci\u handle\u工厂:ORA-12514:TNS:listener目前不知道在/opt/http/Zend/Zend/Db/Adapter/pdo/Abstract.php第144行
Zend\u Db\u Adapter\u异常:SQLSTATE[HY000]:pdo\u oci\u handle\u工厂:ORA-12514:TNS:listener目前不知道在/opt/http/Zend/Zend/Db/Adapter/pdo/Abstract.php第144行的连接描述符(/home/http/php-5.3.3/ext/pdo\u-oci/oci-driver.c:579)中请求的服务
我试过做研究,但没有找到可靠的解决方案。我确实读到它可能与tnsnames.ora关联,但我在服务器上找不到该文件。我以前在其他项目中使用过Zend,没有任何问题
仅供参考:我没有根,所以我不能在服务器上做太多的魔术
你有什么建议 这是来自Oracle的常见错误消息,与zend甚至php无关。我通常在SQLDeveloper或Toad中获得此消息。检查tnsnames.ora、listener.ora、sqlnet.ora、日志文件等,并尝试连接客户端应用程序。(如果不起作用,您可以向管理员报告)您需要在
$ORACLE\u HOME/network/admin
文件夹中创建一个名为tnsnames.ora的文件,并将SID放入其中
或者,如果无法创建tnsnames.ora,请尝试使用以下语法设置数据库配置:
$config = new Zend_Config(
array(
'database' => array(
'adapter' => 'oracle',
'params' => array(
'dbname'=> '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hostname.domain.tld)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service_name)))',
'username' => 'dev',
'password' => 'pwd')
)
)
);
$db = Zend_Db::factory($config->database);
Zend_Db_Table::setDefaultAdapter($db);
尽管使用DB配置创建tnsnames.ora更好。对于那些不使用Zend Framework但存在类似问题的用户,可以在 如果使用SID进行连接,请更改
(SERVICE_NAME = orcl)
到
在cmd行中尝试使用tnsping,因为SIDI希望得到关于连接字符串所涉及的黑魔法的解释,但它为我解决了一些问题。
(SERVICE_NAME = orcl)
(SID = yourSid)