ThinkPHP连接ORACLE数据库的详细教程

 更新时间:2023年12月15日 10:14:45   作者:暴走十八步  
ThinkPHP要连接Oracle数据库,必须有两个东西,一个PHP官方写的扩展,一个Oracle官方写的客户端,本文小编给大家详细介绍了ThinkPHP连接ORACLE数据库的教程,文中通过图文结合的方式讲解的非常详细,需要的朋友可以参考下

概念

  • 要连接Oracle数据库,必须有两个东西,一个PHP官方写的扩展,一个Oracle官方写的客户端
  • PHP是通过扩展去操作oralce客户端连接的服务端数据库,所以两个都不能少,而且版本必须一致
  • PHP官方写的Oracle扩展:oci8,有很多版本,还有32位和64位,每个版本官网有写对于的oracle版本
  • Ocracle官方写的客户端:Instant Client,也分为32位和64位,需要根据PHP匹配,下面会讲

基本步骤

  • 下载并配置oci8扩展
  • 下载并配置oracle客户端
  • 配置thinkphp

详细操作

下载并配置oci8扩展

oci8包含很多版本

  • 如何选择版本:
  • 打开phpstudy环境,打开首页phpinfo.php,查看PHP版本

在这里插入图片描述

  • 这里7.0.12选择32位的oci8扩展+32位的Instant Client
  • 下载对于版本

在这里插入图片描述

  • 7.3以上的PHP要选择2.2.0以上版本,这里选择7.0对于的版本,因为使用的phpstudy2016,使用的PHP版本是php-7.0.12-nts
  • 注意对应版本的位数,32和64不能兼容
  • 解压后把这些全部拷贝到PHP的ext目录下D:\phpStudy\php\php-7.0.12-nts\ext

在这里插入图片描述

  • 打开php.ini,找到extension所在,填写以下内容
extension=php_pdo_oci.dll
extension=php_oci8.dll
;;extension=php_oci8_11g.dll
extension=php_oci8_12c.dll
  • 说明:
  • php_pdo_oci.dll:这个是phpstudy自带的,使用pdo方法去连接oci8,这个必须打开
  • php_oci8.dll:这个是拷贝进入的oci8基本扩展,必须打开
  • php_oci8_11g.dll / php_oci8_12c.dll:这个是扩展版本,实测任意打开一个,都可以连接oracle 11g和oracle 19c,后面一个感觉速度更快
  • 重启phpstudy
  • 出现oci8扩展,说明安装成功

在这里插入图片描述

在这里插入图片描述

  • 这里也有版本选择,不管phpinfo是32还是64,这里都下载32位,实测32位可以匹配64和32的PHP(phpstudy_pro中PHP7.3.4版本测试)
  • 下载需登录,注册一个账号即可
  • 这里选择phpinfo中提示的instantclient_12_1

在这里插入图片描述

在这里插入图片描述

  • 解压到任意没有中文路径的地方,如D:/instantclient_12_1
  • 配置环境变量,这个和JAVA类似,就是可以在任何地方执行instantclient_12_1中功能

在这里插入图片描述

  • 这个必须要配置,最终连接Oracle数据库的是instant client客户端,这个和oracle不匹配直接导致无法连接,实测32位可以匹配PHP64或者32(instant client版本还和oracle服务端版本有关,32位不行就换一个试试)
  • 配置thinkphp
  • common->config中配置
<?php
return array(
	//连接oracle 11g r2
	'DB_TYPE' =>  'oracle',      // 数据库类型
	'DB_HOST' =>  '127.0.0.1',   // 服务器地址
	'DB_NAME' =>  'orcl',    // 数据库名
	'DB_USER' =>  'usr',          // 用户名
	'DB_PWD'  =>  'pwd', // 密码
	'DB_PORT' =>  '1521',        // 端口
	
	//连接oracle 19c CBD模式
	// 'DB_TYPE' =>  'oracle',      // 数据库类型
	// 'DB_HOST' =>  '127.0.0.1',   // 服务器地址
	// 'DB_NAME' =>  'orcl',    // 数据库名
	// 'DB_USER' =>  'C##usr',          // 用户名
	// 'DB_PWD'  =>  'pwd', // 密码
	// 'DB_PORT' =>  '1521',        // 端口
);
  • 书写测试连接方法
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function index(){
		$sql = " select * from tablea where rownum <10 ";
		$rs = M()->query($sql);
		var_dump($rs);
	}
}
  • 经实测,11G和19C都可以连接

问题排除

oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries

  • 解决方案:Instant Client没有配置在环境变量中,配置一下即可

SQLSTATE[HY000]: OCIEnvNlsCreate: Check the character set is valid and that PHP has access to Oracle libraries and NLS data (ext\pdo_oci\oci_driver.c:688)

  • 解决方案:Instant Client版本不匹配,如果是64位的,换成32位的试一试

以上就是ThinkPHP连接ORACLE数据库的详细教程的详细内容,更多关于ThinkPHP连接ORACLE的资料请关注脚本之家其它相关文章!

相关文章

  • PHP中“简单工厂模式”实例代码讲解

    PHP中“简单工厂模式”实例代码讲解

    PHP中简单工厂模式实例代码,学习php类的朋友可以参考下
    2012-09-09
  • php.ini 配置文件的深入解析

    php.ini 配置文件的深入解析

    本篇文章是对php.ini配置文件进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP常用操作类之通信数据封装类的实现

    PHP常用操作类之通信数据封装类的实现

    PHP类的封装对于初学者来说是比较难懂的,下面这篇文章主要给大家介绍了关于PHP常用操作类之通信数据封装类实现的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来一起学习学习吧。
    2017-07-07
  • 浅谈php提交form表单

    浅谈php提交form表单

    这篇文章主要介绍了浅谈php提交form表单的2种方法和简单的示例,十分的实用,有需要的小伙伴可以参考下。
    2015-07-07
  • 详解PHP的抽象类和抽象方法以及接口总结

    详解PHP的抽象类和抽象方法以及接口总结

    这篇文章主要介绍了PHP的抽象类和抽象方法以及接口总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • php+mysql结合Ajax实现点赞功能完整实例

    php+mysql结合Ajax实现点赞功能完整实例

    这篇文章主要介绍了php+mysql结合Ajax实现点赞功能,以一个完整实例形式详细分析了实现点赞功能中涉及的html页面、Ajax功能及php方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • PHP中PDO关闭连接的方法问题

    PHP中PDO关闭连接的方法问题

    这篇文章主要介绍了PHP中PDO关闭连接的方法问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • php 动态执行带有参数的类方法

    php 动态执行带有参数的类方法

    PHP中,在事先知道类和类的方法名称,使用call_user_func函数可以做动态执行。
    2009-04-04
  • PHP中限制IP段访问、禁止IP提交表单的代码

    PHP中限制IP段访问、禁止IP提交表单的代码

    最近,小编发现有一个云南的网友经常在网站发表一些垃圾信息的评论,由于使用的事DEDECMS构架,系统本身并无禁止IP功能,每天看到这些垃圾评论,尽管不多,但是让人感觉不爽,那么如何来限制呢?
    2011-04-04
  • 在普通HTTP上安全地传输密码

    在普通HTTP上安全地传输密码

    在普通HTTP上安全地传输密码...
    2007-07-07

最新评论