PHP OCI:连接字符串(从 JDBC 转换)
PHP OCI: Connection string (convert from JDBC)
我在 SQL 开发人员中有以下混淆的连接字符串:
jdbc:oracle:thin:@//xyz-scan.example.com:1521/mydb.example.com
如何在 php oci_connect 中使用它?
$db = 'xyz-scan.example.com:1521/mydb.example.com';
$con = oci_connect('scott', 'tiger', $db, 'AL32UTF8');
导致错误:
ORA-12545: Connect failed because target host or object does not exist
我能ping通服务器。
我也试过了
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=mydb.example.com)';
并用 service_name 代替 SID。什么都不管用。
上面给出了这个错误:
ORA-12154: TNS:could not resolve the connect identifier specified
如何转换此连接字符串以与 php oci 一起使用? (有没有一种独特的方法?对于不同的数据库,我有一个 @ldap://...
我将如何转换它?
扫描地址第一个问题的解决方法很简单:
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=<sid>)';
第二个有ldap的就没那么简单了。据我所知,oracle 有它自己的 ldap 东西,你可以在其中存储数据库 TNS 条目。这意味着您可以像查询任何 ldap 系统一样查询它:
<?php
$ds=ldap_connect("oid.mydomain.com", myport); // Connect to oracle ldap
$r=ldap_bind($ds); // Bind to ldap
$sr = ldap_search($ds, "cn=OracleContext,dc=xyz,dc=abc,dc=com", "cn=dbname"); // Run query xyz.abc.com
$info = ldap_get_entries($ds, $sr); // Get entries
ldap_close($ds);
$dbconnectstring = $info[0]["orclnetdescstring"][0]; // Extract db connect string from ldap search result array
$con = oci_connect('scott', 'tiger', $dbconnectstring);
?>
此脚本将获得完整的 TNS 连接字符串,然后您可以将其用于 oci_connect。
我在 SQL 开发人员中有以下混淆的连接字符串:
jdbc:oracle:thin:@//xyz-scan.example.com:1521/mydb.example.com
如何在 php oci_connect 中使用它?
$db = 'xyz-scan.example.com:1521/mydb.example.com';
$con = oci_connect('scott', 'tiger', $db, 'AL32UTF8');
导致错误:
ORA-12545: Connect failed because target host or object does not exist
我能ping通服务器。
我也试过了
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=mydb.example.com)';
并用 service_name 代替 SID。什么都不管用。 上面给出了这个错误:
ORA-12154: TNS:could not resolve the connect identifier specified
如何转换此连接字符串以与 php oci 一起使用? (有没有一种独特的方法?对于不同的数据库,我有一个 @ldap://...
我将如何转换它?
扫描地址第一个问题的解决方法很简单:
$db = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST = xyz-scan.example.com)(PORT=1521))
(CONNECT_DATA=(SERVER=DEDICATED)
(SID=<sid>)';
第二个有ldap的就没那么简单了。据我所知,oracle 有它自己的 ldap 东西,你可以在其中存储数据库 TNS 条目。这意味着您可以像查询任何 ldap 系统一样查询它:
<?php
$ds=ldap_connect("oid.mydomain.com", myport); // Connect to oracle ldap
$r=ldap_bind($ds); // Bind to ldap
$sr = ldap_search($ds, "cn=OracleContext,dc=xyz,dc=abc,dc=com", "cn=dbname"); // Run query xyz.abc.com
$info = ldap_get_entries($ds, $sr); // Get entries
ldap_close($ds);
$dbconnectstring = $info[0]["orclnetdescstring"][0]; // Extract db connect string from ldap search result array
$con = oci_connect('scott', 'tiger', $dbconnectstring);
?>
此脚本将获得完整的 TNS 连接字符串,然后您可以将其用于 oci_connect。