当前位置: 代码网 > it编程>编程语言>Php > ThinkPHP连接ORACLE数据库的详细教程

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

2024年05月18日 Php 我要评论
概念要连接oracle数据库,必须有两个东西,一个php官方写的扩展,一个oracle官方写的客户端php是通过扩展去操作oralce客户端连接的服务端数据库,所以两个都不能少,而且版本必须一致php

概念

  • 要连接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的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com