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
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后再刷新会出现版本信息
下载并配置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位不行就换一个试试)
配置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位的试一试。
Tags: ThinkPHP连接ORACLE
- 上一篇:PHP利用ThinkPHP6完整实现用户分页功能
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)