Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么会出现此错误?如何修复?_Php_Oracle_Zend Framework_Tns - Fatal编程技术网

Php 为什么会出现此错误?如何修复?

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行

我编写了一个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行的连接描述符(/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)