当前位置:首页 > CMS教程 > Thinkphp > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2024-03-10 11:20:13 浏览: 评论:0 

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扩展

下载地址:http://pecl.php.net/package/oci8

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

oci8包含很多版本

如何选择版本:

打开phpstudy环境,打开首页phpinfo.php,查看PHP版本

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

这里7.0.12选择32位的oci8扩展+32位的Instant Client

下载对于版本

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

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

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

打开php.ini,找到extension所在,填写以下内容

  1. extension=php_pdo_oci.dll 
  2. extension=php_oci8.dll 
  3. ;;extension=php_oci8_11g.dll 
  4. 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扩展,说明安装成功

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

新安装的Oracle Run-time Client Library Version可能出现0.0.0.0,等配置Instant Client后再刷新会出现版本信息

下载并配置oracle客户端

下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html

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

这里也有版本选择,不管phpinfo是32还是64,这里都下载32位,实测32位可以匹配64和32的PHP(phpstudy_pro中PHP7.3.4版本测试)

下载需登录,注册一个账号即可

这里选择phpinfo中提示的instantclient_12_1

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

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

解压到任意没有中文路径的地方,如D:/instantclient_12_1

配置环境变量,这个和JAVA类似,就是可以在任何地方执行instantclient_12_1中功能

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

这个必须要配置,最终连接Oracle数据库的是instant client客户端,这个和oracle不匹配直接导致无法连接,实测32位可以匹配PHP64或者32(instant client版本还和oracle服务端版本有关,32位不行就换一个试试)

配置thinkphp

common->config中配置

  1. <?php 
  2. return array
  3.     //连接oracle 11g r2 
  4.     'DB_TYPE' =>  'oracle',      // 数据库类型 
  5.     'DB_HOST' =>  '127.0.0.1',   // 服务器地址 
  6.     'DB_NAME' =>  'orcl',    // 数据库名 
  7.     'DB_USER' =>  'usr',          // 用户名 
  8.     'DB_PWD'  =>  'pwd'// 密码 
  9.     'DB_PORT' =>  '1521',        // 端口 
  10.       
  11.     //连接oracle 19c CBD模式 
  12.     // 'DB_TYPE' =>  'oracle',      // 数据库类型 
  13.     // 'DB_HOST' =>  '127.0.0.1',   // 服务器地址 
  14.     // 'DB_NAME' =>  'orcl',    // 数据库名 
  15.     // 'DB_USER' =>  'C##usr',          // 用户名 
  16.     // 'DB_PWD'  =>  'pwd', // 密码 
  17.     // 'DB_PORT' =>  '1521',        // 端口 
  18. ); 

书写测试连接方法

  1. <?php 
  2. namespace Home\Controller; 
  3. use Think\Controller; 
  4. class IndexController extends Controller { 
  5.     public function index(){ 
  6.         $sql = " select * from tablea where rownum <10 "
  7.         $rs = M()->query($sql); 
  8.         var_dump($rs); 
  9.     } 

经实测,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位的试一试。

Tags: ThinkPHP连接ORACLE

分享到: