3

我正在尝试在我的本地 WAMP 服务器和我拥有的一些 Oracle 11.1.0.7 之间配置一个简单的连接。显然,PHP 有各种无法启动的解决方案和神奇的情况。

我正在运行来自 WAMP 的最新 32 位版本(我今天再次获取它只是为了检查) db 机器也是 32 位的,而不是本地的

这是我连接到数据库的尝试,每次我遇到同样的错误:

    $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = some.ip.addr)(PORT = 1521)))(CONNECT_DATA=(SID=somesid)))";
    //$link = oci_connect('sqlmap', 'sqlmap', 'some.ip.addr') OR die('oci_connect' . print_r(oci_error()));
    //$link = oci_connect('sqlmap', 'sqlmap', $db) OR die('oci_connect error' . print_r(oci_error()));
    //$link = oci_connect('sqlmap','sqlmap', 'some.ip.addr/somesid') or die('<= oci_connect ' . print_r(oci_error()));
    //$link = oci_connect('sqlmap','sqlmap', '//some.ip.addr/somesid') or die('<= oci_connect ' . print_r(oci_error()));
    $link = oci_connect('sqlmap','sqlmap', '//some.ip.addr/somesid');

Warning: oci_connect() [function.oci-connect]: ORA-24315: illegal attribute type in


Array ( [code] => 24315 [message] => ORA-24315: illegal attribute type [offset] => 0 [sqltext] => ) oci_connect1

有关 OCI 的更多信息

OCI8 Support    enabled
Version 1.4.7
Revision    $Revision: 321634 $
Active Persistent Connections   0
Active Connections  0
Oracle Run-time Client Library Version  10.2.0.1.0
Oracle Instant Client Version   11.2
Temporary Lob support   enabled
Collections support enabled

Directive   Local Value Master Value
oci8.connection_class   no value    no value
oci8.default_prefetch   100 100
oci8.events Off Off
oci8.max_persistent -1  -1
oci8.old_oci_close_semantics    Off Off
oci8.persistent_timeout -1  -1
oci8.ping_interval  60  60
oci8.privileged_connect Off Off
oci8.statement_cache_size   20  20


Apache Version :
2.2.21  
PHP Version :
5.3.9

如果有人能暗示我可能会错过什么,我会很高兴

4

2 回答 2

2

查看您的配置,您已经安装了 Oracle 客户端和 Oracle Instant Client:

Oracle Run-time Client Library Version  10.2.0.1.0
Oracle Instant Client Version   11.2

但是,我的经验是 PHP 只会使用一个或另一个 - 基本上,首先找到的任何一组库都会被使用。由于您可以很好地连接到 Oracle 10g,但不能连接到 11g,这表明 10g 客户端库在您的路径中比即时客户端库“更高”。

我建议探索两个选项:

  1. 安装完整的 Oracle 11g 客户端
  2. 具体更改您的路径以确保首先找到 Instant Client 库 - 当然,请确保您正在影响 PHP 使用的有效路径,而不仅仅是单独上下文中的 PATH 变量...

我从来没有真正让 PHP 与 Instant Client 一起正常工作——我放弃并安装了完整的客户端——所以我个人的建议是选项 1,但如果这在您的环境中不实用,请先使用 PATH。

于 2012-03-06T12:25:08.257 回答
0
  1. 执行“phpinfo()”;
  2. 在“配置命令”中,您将看到类似:“--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,shared”“--with-oci8=C:\php-sdk\ oracle\instantclient10\sdk,shared" "--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,shared" ...到目前为止还可以!
  3. 从http://www.oracle.com/technetwork/topics/winsoft-085727.html下载 Oracle“Instant Client for Microsoft Windows 32-bit”和您的“SDK” ,即使您的 Windows 是 64 位:3.1 下载“ Instant Client Package - Basic:运行 OCI、OCCI 和 JDBC-OCI 应用程序所需的所有文件:instantclient-basic-win32-11.1.0.7.0.zip" 3.2 下载 "*Instant Client Package - SDK:附加头文件和一个使用 Instant Client 开发 Oracle 应用程序的示例 makefile:instantclient-sdk-win32-11.1.0.7.0.zip" 3.4 在同一个文件夹中解压两个 zip,解压后您将看到 SDK 进入 Instantclient_11 文件夹;到这里OK!
  4. 将此解压后的文件夹复制到 C:\Windows\SysWOW64\instantclient_11_1
  5. 创建C:\php-sdk\oracle\instantclient11,将C:\Windows\SysWOW64\instantclient_11_1的内容复制到C:\php-sdk\oracle\instantclient11
  6. 现在,将以下内容添加到 Windows 环境变量 PATH:“C:\Windows\SysWOW64\instantclient_11_1”
  7. 最后,打开 Wamp 并启用 php_oci8_11g 扩展
  8. 再次检查“phpinfo()”;有用!为什么???因为 C:\wamp\bin\php\php5.3.13\ext\php_oci8_11g.dll 或 C:\wamp\bin\php\php5.3.13\ext\php_oci8.dll 是 32 位 DLL;进入 64 位环境,当您的 Windows 需要 32 位版本的“Oracle Instant Client”时,它会寻找 C:\Windows\SysWOW64 。
于 2014-09-10T17:12:44.570 回答