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位的就可以了

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1005 [NOIP2007 提高组] 矩阵取数游戏

网址&#xff1a;P1005 [NOIP2007 提高组] 矩阵取数游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划和高精度的组合&#xff0c;使我的滨州旋转 最后只得了80&#xff0c;两个测试点超时了 看题解有人是用了int128来做的&#xff0c;明天学一下 我的递归思路和…

MongoDB的分片

本文主要介绍MongoDB的分片。 目录 MongoDB的分片组成分片过程操作步骤注意事项 MongoDB的分片 MongoDB的分片是一种横向扩展数据库的方式&#xff0c;可以将数据分散存储在多台服务器上&#xff0c;从而提高数据库的处理能力和可用性。 组成 MongoDB的分片由三个组成部分组…

Ansible中执行流控制

1.ansible中的迭代循环 创建目录和文件 vim createfile.yaml - name: create file playbook hosts: all tasks: - name: create file file: path: "/mnt/{{item[name]}}" state: …

scala变量与变量类型

1.6 变量与类型&#xff08;重点&#xff09;1.6.1 变量推断1.6.2 多变量定义1.6.3 var和val的区别 1.6.3.1 是否可变 1.6.3.2 延迟加载 1.6 变量与类型&#xff08;重点&#xff09; val修饰的变量&#xff0c;相当于Java中final修饰的变量; // 定义常量s1&#xff0c;使用…

GPIO的使用--USART串口通信--传感器控制数据

目录 一、串口通信 1、概念 2、原理图 3、使用步骤 &#xff08;1&#xff09;寻找串口位置 &#xff08;2&#xff09;确定引脚编号 &#xff08;3&#xff09;编写代码 4、实验结果 实验代码 main.c usart.c usart.h 一、串口通信 1、概念 串行接口是一种可以将…

GPT-4 变懒了?官方回复

你是否注意到&#xff0c;最近使用 ChatGPT 的时候&#xff0c;当你向它提出一些问题&#xff0c;却得到的回应似乎变得简短而敷衍了&#xff1f;对于这一现象&#xff0c;ChatGPT 官方给出了回应。 译文&#xff1a;我们听到了你们所有关于 GPT4 变得更懒的反馈&#xff01;我…

玩转大数据10:深度学习与神经网络在大数据中的应用

目录 1. 引言&#xff1a;深度学习和神经网络在大数据中的重要性和应用场景 2. 深度学习的基本概念和架构 3. Java中的深度学习框架 3.1. Deeplearning4j框架介绍及Java编程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大数据与深度学习的结合 4.1. 大数据与深度学…

Redis探秘:AOF日志与数据持久性之旅

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;咱们今天来聊聊Redis。你知道吗&#xff0c;Redis作为一个超高效的内存数据库&#xff0c;真的是超级给力。它可以秒速处理数据&#xff0c;让咱们的应用运行得飞快。但是&#xff0c;小黑得告诉你&#xff0c;虽…

Linux进程地址空间

Linux进程地址空间 一.语言上的内存分区1.内存分区的理论说明2.内存分区的代码验证3.一个"奇怪"的现象 二.进程地址空间1.现象解释2.什么是进程地址空间3.页表的权限属性与重新理解写时拷贝4 .为什么要有进程地址空间和页表5.用进程地址空间解释一些问题1.为何进程之…

android 13.0 去掉recovery模式UI操作页面的菜单选项

1.概述 在13.0进行系统rom定制化开发中,在进行一些定制化开发中,会根据需要在进入recovery模式的时候,去掉recovery模式的一些菜单选项, Reboot to bootloader,Enter rescue等菜单项,经过分析得知, 就是在device.cpp去掉一些菜单选项就可以了,接下来就来分析实现相关功…

从Centos-7升级到Centos-Stream-8

如果在正式环境升级&#xff0c;请做好数据备份以及重要配置备份&#xff01;因为升级会造一部分应用被卸载。 注意&#xff1a;升级前请备份好数据&#xff0c;升级可能会导致ssh的root用户无法登陆、网卡名称发生改变、引导丢失无法开机等问题。 1.安装epel源 yum -y install…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中&#xff0c;如果 Redis 集群崩溃了&#xff0c;那么会导致大量的请求打到数据库中&#xff0c;会导致整个系统都崩溃&#xff0c;所以系统需要可以识别缓存故障&#xff0c;限流保护数据库&#xff0c;并且启动接口的降级机制 降级方案设计 …

【EI征稿中|ACM出版】2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023)

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff…

BUUCTF-[GYCTF2020]FlaskApp flask爆破pin

这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__[__import__](so[::-1])[popen]("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\x78\x74")).read())}} 但是学习记录一下pin…

【已解决】解决UbuntuKali无法进行SSH远程连接

目录 Ubuntu20.04配置SSH远程连接Kali Linux配置SSH远程连接 Ubuntu20.04配置SSH远程连接 首先更新安装包 sudo apt-get update 下载SSH服务 sudo apt install openssh-server 查看SSH服务 service ssh status 打开 /etc/ssh/sshd_config文件修改配置文件 将PermitRootLog…

秋招春招,我没有拿到一个offer怎么办?

无论是秋招&#xff0c;还是春招&#xff0c;对于应届毕业生来说&#xff0c;都是最佳的拿offer的时机&#xff0c;当然错过了也不是绝境&#xff0c;机会无处不在&#xff0c;只是说校招是最好的机会。希望朋友们重视起来&#xff0c;积极的争取到满意的工作岗位。 从竞争的角…

MyBatis 常见面试题

目录 1.MyBatis——概述1.1.什么是 ORM 框架&#xff1f;1.2.✨谈谈对 MyBatis 的理解。1.3.使用 MyBatis 相对于直接使用 SQL 有哪些优点&#xff1f;1.4.MyBatis 有什么优缺点&#xff1f;1.5.✨MyBatis 的分层结构是什么样的&#xff1f;1.6.✨MyBatis 的执行流程是什么样的…

【Spring教程22】Spring框架实战:Spring事务角色与 Spring事务属性、事务传播行为代码示例详解

目录 1.Spring事务角色1.1 未开启Spring事务之前:1.2 开启Spring的事务管理后2 Spring事务属性2.1 事务配置2.2 转账业务追加日志案例2.2.1 需求分析2.2.2 环境准备 2.3 事务传播行为2.3.1.修改logService改变事务的传播行为2.3.2 事务传播行为的可选值 欢迎大家回到《 Java教…

vs2017+qt5.14.2遇到的问题

1、在安装qt插件后&#xff0c;导入pro文件时&#xff0c;报 msvc-version.conf loaded but QMAKE_MSC_VER isn’t set 修改E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common\msvc-version.conf文件中添加

Leetcode1466. 重新规划路线

Every day a Leetcode 题目来源&#xff1a;1466. 重新规划路线 解法1&#xff1a;深度优先搜索 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。 因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗…