Code前端首页关于Code前端联系我们

如何用PHP7在Windows上配置远程连接Oracle数据库

terry 2年前 (2023-09-25) 阅读数 49 #后端开发

项目需求,需要定期去另一个项目组的Oracle数据库获取一些数据,在本地配置如何连接Oracle,第一步是在Windows上配置又经历了一个坑,终于配置完成了。在这里分享一下,希望对有需要的人有帮助。

1。首先验证给定的只读帐户是否可以成功连接。您需要在本地安装连接工具(PLSQL Developer)

2。要管理PLSQL Developer连接,需要下载即时客户端oracle工具(instantclient_11_2)并定义一个文件A,用于存储连接数据库的信息并将其放置在工具目录中。

Oracle客户端必须与Oracle版本一致(一般不一致也可以)。我问DBA,这里是什么版本的,去Oracle官网下载合适的客户端,因为本地的phpstudy包含的php都是32位版本的。我担心可能有问题,所以下载了一个与PHP版本相同位数的客户端(64位电脑系统,所以与此无关)。

解压客户端放在一个目录下,新建一个放在客户端文件夹的子目录下。

PHP7在windows配置远程连接Oracle数据库的方法

输入以下内容

test_db=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP)(PORT =1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = dbname)
    )
  )

test_db是你自己给的连接名称,将IP替换为远程oracle IP,service_name中输入数据库名称。

将客户端目录添加到路径中以方便连接到 PLSQL Developer。

添加ORACLE_HOME系统变量来存储客户端目录。

添加NLS_lANG系统变量并保存为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,解决编码读取问题。

安装好PLSQL Developer后,连接看看是否可以连接。

3。从 php 启用 oci 扩展或 pdo_oci 扩展并测试连接。

因为php7没有php_oci_11g扩展,所以必须自己安装,下载合适版本的dll文件,放到php ext目录下,运行扩展。

打开后可能会出现 Windows 中丢失的文件。

PHP7在windows配置远程连接Oracle数据库的方法

现在,将上述客户端中的文件复制到php目录中。

启动php并查看PHPinfo。应出现以下扩展:

PHP7在windows配置远程连接Oracle数据库的方法

尝试连接到数据库

try{
  // $conn = new PDO("oci:dbname=//IP:1521/dbname",'username','password');// PDO方式
   $conn = oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=IP)(PORT = 1521))(CONNECT_DATA =(SID=dbname)))");
   var_dump($conn);
   echo "连接成功";
}catch(PDOException $e){
   echo ("Error:".$e->getMessage());
}
  • PDO 方法将引发以下异常 (SQLSTATE[]: pdo_oci_handle_factory: (ext\pdo_oci\) 2017-03-08+ 1). 在 Windows 中。既然您确定已经安装了该扩展,那么它可能不是 PHP 错误或其他任何东西(我见过一些人向 PHP 官方报告错误)。

    有人说把所有dll文件复制到system32或者全部复制到php等等。首先,不建议复制任何东西到c盘目录下。乱七八糟,因为功能小就把文件放进去肯定是荒唐的。只需将其放在您需要的地方即可。

    和上面缺少的文件一样,因为是php使用的,所以php会在自己的目录下寻找该文件,只放到php目录下(当然也可以放到system32下)

    由于配置时间比较长,我有点累了,所以就把所有的Client文件复制到php目录下。测试中不再出现上述错误,证明是缺少上述文件之一造成的。我这里想要的是nginx + phpcgi。此时,如果你把刚刚复制到php目录下的文件删除,其中有一些文件如果用到的话肯定是删除不了的。尝试后,只有后面的文件和以前的文件无法删除。

    PHP7在windows配置远程连接Oracle数据库的方法

    这个文件的另一个特点是体积非常大,并且有很多功能扩展等等。

    现在已经完成了,尝试上面的PHP代码:

    • 表单PDO打印连接类型(object(PDO)#1(0){
      })
    • 正常连接返回连接类型(资源(5) )类型(oci8连接))

    总结:

    不要相信答案,每次都将其复制到system32,并将所有文件放在某个地方。这会导致系统目录混乱,你将无法找到它。问题虽然解决了,但是思路不清晰,可能会莫名其妙的自行解决(其实也没用)

    补充:

    使用PHP连接数据库时,来自Oracle的数据库名称必须配置sid,而不是数据库名称。这两者有些配置是不同的,一定要注意,否则无法连接。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门