我编写了一个 PHP 脚本来从 Oracle 数据库中提取查询并将结果写入 csv 文件。我正在使用 Zend Framework 连接到数据库。我知道凭据是正确的,因为我可以使用 SQLPlus 通过终端进行连接。
这是错误:
Zend_Db_Adapter_Exception: SQLSTATE[HY000]: pdo_oci_handle_factory: ORA-12514: TNS:listener 目前不知道连接描述符中请求的服务 (/home/http/php-5.3.3/ext/pdo_oci/oci_driver. c:579) 在/opt/http/Zend/ZendFramework-1.10.3/library/Zend/Db/Adapter/Pdo/Abstract.php 第 144 行
我曾尝试做研究,但没有可靠的解决方案。我读到它可能与 tnsnames.ora 相关联,但我在服务器上找不到该文件。我之前在其他项目中使用过 Zend,没有任何问题。
仅供引用:我没有 root,所以我不能在服务器上做很多事情。
你有什么建议?
最佳答案
您需要在 $ORACLE_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);
尽管最好使用您的数据库配置创建 tnsnames.ora。
关于php - 为什么会出现此错误以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9378975/