ThinkPHP连接ORACLE数据库教程

目录

  • 概念
  • 基本步骤
  • 详细操作
  • 问题排除
  • 参考

概念

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

基本步骤

  1. 下载并配置oci8扩展
  2. 下载并配置oracle客户端
  3. 配置thinkphp

详细操作

  1. 下载并配置oci8扩展
  • 下载地址:http://pecl.php.net/package/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扩展,说明安装成功
    在这里插入图片描述
  • 新安装的Oracle Run-time Client Library Version可能出现0.0.0.0,等配置Instant Client后再刷新会出现版本信息
  1. 下载并配置oracle客户端
  • 下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
  • 在这里插入图片描述
  • 这里也有版本选择,不管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位不行就换一个试试)
  1. 配置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位的试一试

参考

  • https://blog.csdn.net/qq_35372797/article/details/120791792 按照这篇文章配置出现编码错误,实际上是Instant Client版本不匹配,换成32位的就可以了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS导入excel中的经纬度信息,绘制矢量

1.首先整理坐标信息 2.其次转成2003格式的excel文件 3.导入arcgis&#xff0c;点击右键添加excel数据 4.显示xy数据 5.显示经度和纬度信息 6&#xff1a;点击【地理坐标系】->【World】->【WGS 1984】->【确定】 7.投影带的确定方式&#xff1a; 因为自己一直…

字节跳动面经题

字节跳动面经题 1、了解anchor-free? "Anchor-free"是一个指向一类目标检测方法的术语&#xff0c;与传统的"anchor-based"方法相对应。在传统的目标检测中&#xff0c;通常会使用一系列预定义的锚框&#xff08;anchors&#xff09;作为模型的基础。这些…

verilog基本语法-时序逻辑基础-记忆单元

概述: 组合逻辑虽然可以构造各种功能电路&#xff0c;但是他有一个缺点就是输入改变时&#xff0c;输出会立即发生改变。因此历史信息不能被保存下来。两个能够保存信息的存储单元被设计出来&#xff0c;用于保存历史信息。一个是锁存器&#xff0c;另外一个是触发器。锁存器是…

(基础篇)通过node增删改查连接mysql数据库

一定要会最基础的sql建表一定要会最基础的sql建表一定要会最基础的sql建表 首先说一下准备工作 一、准备工具 1.mysql数据库Navicat可视化工具&#xff08;数据库表单已经建好&#xff09; 我这里用的小皮工具直接开启的本地mysql 2.vscode (不用说基本上都有) 3.node.js …

仿牛客论坛的一些细节改进

私信列表的会话头像链接到个人主页 原来的不足 点击私信列表的会话头像应该要能跳转到该目标对象的个人主页。 原来的代码&#xff1a; <a href"profile.html"><img th:src"${map.target.headerUrl}" class"mr-4 rounded-circle user-he…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

web前端实现LED功能、液晶显示时间、数字

MENU 效果演示html部分JavaScript部分css部分 效果演示 html部分 <div id"app"><!-- 页面 --><div class"time-box"><!-- 时 --><div class"house-box"><bit-component :num"houseTem"></bit…

【MODBUS】Modbus是什么?

Modbus协议&#xff0c;从字面理解它包括Mod和Bus两部分&#xff0c;首先它是一种bus&#xff0c;即总线协议&#xff0c;和12C、SP|类似&#xff0c;总线就意味着有主机&#xff0c;有从机&#xff0c;这些设备在同一条总线上。 Modbus支持单主机&#xff0c;多个从机&#xf…

Colorful Grid Codeforces Round 910 (Div. 2) C

Problem - C - Codeforces 题目大意&#xff1a;有一个n*m的网格&#xff0c;要求从(1,1)走到(n,m)&#xff0c;同时要求路径的长度必须为k1&#xff0c;然后给每个两点之间的路径染成红色或蓝色&#xff0c;要求任意两个相邻线段颜色不能相同&#xff0c;求涂色的方案 3<…

将程序注册为系统服务

cmd中执行命令&#xff1a; sc create Redis binpath "C:\guet_run1\Redis-x64-5.0.14.1\redis-server.exe" type own start auto displayname "Redis"注意&#xff0c;命令中所有的等号和值之间需要一个空格&#xff08;等号前不要空格&#xff0c;等号后…

Linux---查看命令帮助

1. 查看命令帮助方式 --help 使用说明: 命令 --helpman 使用说明: man 命令 查看命令帮助的目的说明: 查看命令帮助目的是查看命令选项信息的 --help效果图: man效果图: man命令的说明: 操作键说明空格显示下一屏信息回车显示下一行信息b显示上一屏信息f显示下一屏信息q退…

[c++] 意识需要转变的一个例子,全局变量的构造函数先于main执行

最近还遇到一个例子是关于&#xff1a;从C转C开发需要注意的一个意识问题。本人遇到的这个问题是&#xff0c;带着C的意识来看C的代码&#xff0c;然后根据代码看&#xff0c;有一个全局变量的值在main函数进入之后才会更改&#xff0c;所以百思不得其解&#xff0c;这个变量怎…

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

ES中根据主键_id查询记录

一、需求 es中_type&#xff1a;_doc&#xff0c;想要根据主键_id查询记录 二、实现 复合查询中使用语句查询http://192.168.1.1/_doc/1

智能分析/可视化安防监控系统EasyCVR风光互补远程视频监控方案

一、背景需求 在一些偏远地区&#xff0c;也具有视频监控的需求。但是这类场景中&#xff0c;一般无法就近获取市电&#xff0c;如果要长距离拉取市电&#xff0c;建设的成本非常高且长距离传输有安全隐患&#xff0c;因此风光互补远程视频监控方案的需求也较多。利用风光电转…

将创建表字段语句快速转换成golang struct字段

用网页jquery快速生成 本地建立 struct.html <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>leo-转换</title> <script src"https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></s…

代码审计是什么,为什么需要代码审计

随着软件开发技术的不断发展&#xff0c;代码审计变得越来越重要&#xff0c;因为它可以帮助帮助企业从安全角度对应用系统的所有逻辑路径进行测试&#xff0c;通过分析源代码&#xff0c;充分挖掘代码中存在的安全缺陷以及规范性缺陷。找到普通安全测试所无法发现的如二次注入…

Visual Studio Code中tasks.json全局任务命令选项CommandOptions配置介绍

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 从官方文档可见&#xff0c;一个vscode典型的task.json文件包含多种属性&#xff0c;格式复杂&#xff0c;任务可以分为全局任务和局部可选任务&#xff0c;在tasks.json一级配置的 任务为全局任务…

STM32-02-STM32基础知识

文章目录 STM32基础知识1. STM32F103系统架构2. STM32寻址范围3. 存储器映射4. 寄存器映射 STM32基础知识 1. STM32F103系统架构 STM32F103 STM32F103是ST公司基于ARM授权Cortex M3内核而设计的一款芯片&#xff0c;而Cortex M内核使用的是ARM v7-M架构&#xff0c;是为了替代…

Tensorboard可视化远程服务器上保存的训练文件

方法一&#xff1a; 最简单的&#xff0c;把服务器上的训练权重文件下载到本地&#xff0c;使用本地的tensorboard打开 方法二&#xff1a; 使用VsCode的remote ssh插件&#xff0c;可以通过端口映射&#xff0c;将远程的6006端口映射到本地&#xff0c;直接访本地的6006即可…