我正在尝试连接到不在我的PC上的Oracle数据库。我已经安装了Xampp,PHP和Oracle即时客户端。我已经添加了一个Windows环境路径到C:\ instantclient_11_1。当我从phpinfo()检查时,也启用了Oci8。我已将扩展名extension_dir = C:\ php-5.4.0 \ ext添加到php.ini并且还启用了extension = php_oci8_11g.dll。然后,当我尝试使用以下代码连接到数据库时:
<?php
$conn = oci_connect('username', 'password');
$query = 'select table_name from user_tables';
?>
它表示警告:oci_connect():ORA-12560:TNS:协议适配器错误。有人可以帮忙吗?
答案 0 :(得分:2)
oci_connect
call has an optional third parameter for the connection_string
。由于您没有在环境中指定TWO_TASK
或LOCAL
,如文档中所述,您必须提供该连接字符串,以便PHP知道如何查找和连接到您的数据库。
简易连接语法的一般模式是:
$conn = oci_connect('username', 'password', '//hostname:port/service_name');
其中hostname
是数据库所在服务器的名称或IP地址 - 由于您说它不在您的PC上,因此不为localhost
; port
是侦听器端口,默认为1521但可能是其他东西(您可以在服务器上执行lsnrctl status
检查);并且service_name
是数据库服务名称,可能与SID相同或不同(您可以lsnrctl services
查看服务器上的有效值)。
如果您有与同一数据库的SQL Developer连接,则主机名和端口将显示在连接设置中。它还可能显示服务名称,或者可能显示SID,具体取决于它的配置方式。服务名称和SID可能相同。 (如果您无法运行lsnrctl
但拥有足够的权限,则可以尝试select value from v$parameter where name = 'service_names'
,但很可能您无法看到该视图。