ThinkPHP 连接Oracle数据库的详细教程[全]_PHP教程
一、 操作环境搭建
系统:Windows7 旗舰版 64位
PHP环境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32位版
下载地址:http://www.wampserver.com/en/
ThinkPHP:3.0正式版
下载地址:http://thinkphp.cn/down.html
Oracle:Orcale_11gR2 32位版
下载地址:http://www.oracle.com/technetwork/cn/indexes/downloads/index.html
数据库操作工具:PLSQL Developer 32位
下载地址:http://www.allroundautomations.com/plsqldev.html
开发工具:NetBeans IDE 7.1.2
下载地址:http://netbeans.org/downloads/index.html 下载单PHP的版本即可
说明:这里我反复强调软件的“位”,是因为这个很重要,一般情况下,我们系统是64位的,那么最好软件也用64位的,但是这里除过系统外,全部选择32位是有原因的,目的是为了配合PLSQL Developer和WAMP的PHP扩展。因为PLSQL Developer没有64位版。有的朋友说用64位Oracle数据库,装32位客户端就行,我不想这样做,如果不喜欢我的操作方式,可以绕道。当然了,如果你不使用PLSQL Developer,而选择使用Oracle 自带的SQL Developer,那么你全安装64位或32都是你自己的事。PHP连接Oracle数据库需要开启相应的扩展,这个扩展也需要数据库客户端的支持,因为php扩展也需要对应数据库客户端的位数。啰嗦完毕。
二、 环境配置
1, 操作系统的安装我就不说了,Oracle安装自己解决,NetBeans IDE 7.1.2也自己解决。
2, Wamp的安装我也不说了,不会的直接从DOS开始重新学习吧。
3, WAMP会把PHP的网页文件夹定义在安装wamp的文件夹下的www里面,我是安装在D盘,所以就是D:\WAMP\www。我们暂时不做别的自定义修改。启动wamp,系统托盘图标为绿色表示启动OK。
4, 打开localhost,看到如下界面,表示环境配置基本OK。为什么是基本了,因为还没有对Oracle的配置进行设置。
5, 打开如图的PHP扩展菜单,在绿色图标上,左键->PHP->PHP扩展,点击php-oci8的扩展,这时候这个WAMP会重启,等待重启后变绿,就表示OK。
6, 再次打开刚才的localhost页面,如果找到如图4的显示,就表示目前PHP已经支持Oracle了。
注意,我现在用的 wamp和oracle客户端都是32位,如果其中一个是64位,那么这个oci的扩展时打不开的,同时自动环境监测页面也没有oci8的显示。在不使用PL/SQL的前提下,必须是32位Oracle和32位WAMP搭配,64位Oracle和64位WAMP搭配,else请绕道。
三、 ThinkPHP配置
1, 把下载好的3.0正式版解压,项目中只需要ThinkPHP文件夹,这是核心。
2, 使用IDE新建一个项目,项目的文件夹为刚才的Wamp下的www文件夹,如果个人需要自定义别的文件夹,需要修改apache的配置文件,这里我不修改。
3, 将Thinkphp文件夹拷贝到项目文件夹中,新建一个php文件,命名index.php。
4, IDE中已经有这些文件的显示了,打开index.php,编写如下内容:
define('APP_DEBUG', true);
require './ThinkPHP/ThinkPHP.php';
5, 在浏览器中打开localhost/项目名/index.php,Thinkphp会帮你生成好相关文件和文件夹。
6, 对配置文件进行操作,找到:Conf文件夹下config.php文件,修改如下:
return array(
'DB_TYPE' => 'Oracle', // 数据库类型
'DB_HOST' => '192.168.0.8', // 服务器地址
'DB_NAME' => 'orcl', // 数据库名
'DB_USER' => 'test', // 用户名
'DB_PWD' => 'test', // 密码
'DB_PORT' => '1521', // 端口
);
Oracle数据库和mysql 的结构不同,一般默认安装的数据库名是orcl,如果你使用了多个数据库监听,那么就要根据具体的监听字段来设置。比如:我本机数据库坚挺是Orcl,同时监听另外一个外网的数据库,监听字符串为Orcl2,那么如果你需要连接这个外网数据库,那么需要写的数据库名就是orcl2。
7, 经过以上的配置,是已经可以连接oracle数据库了,但是在thinkphp的实际操作中有什么注意的地方,且接着往下看。
最近收集了一些关于THinkPHP连接Oracle数据库的问题,有很多朋友按照连接mysql的方法来操作,导致有一些方法在Oreale中无法正常使用。比如说:findAll,Select方法无法使用,获取不到需要的数据。Create和add方法无法创建和写入数据到数据库中。
其实根据以前问题我做了几天调试,找到了问题所在,并成功在我自己一个小项目练习中使用正常,那么现在就将我的经验分享给大家。
1,数据库的连接及配置文件的内容我就不说了, 上面已经做了解释。我这里只根据一个数据表的例子来说明我的操作。
2,表结构如下:
3,这个表中有3个字段,ID主键,用户名username和密码password,因为oracle数据库把表名和字段都是转成大写的,同时不支持ID主键自增,我只有使用另外的方法来实现这个功能,比如:ID自动序列+触发器实现ID自增。
4, ThinkPHP中,Action是控制器,Model是模型,视图是以模板方式体现的。
首先,说控制器,我只做增加和获取列表的方法介绍。
其次,说模型,这里才是成功的主要原因。为什么?ThinkPHP是有字段映射的,这个在对MYSQL的支持非常完美,基本不用写MODEL,但是对ORALCE就不行了,当使用M->add()来添加数据时,字段会被$this->_facade()方法过滤掉。这样生成的SQL语句就是没法执行的,肯定是错误的,导致数据添加不到数据库中,那么使用select()方法也是一样被过滤。
再次,当我单步调试时,断点被过滤的时候,过滤方法使用到了new出来的MODEL,这个MODEL会有一个字段映射的数组在里面,这个过滤方法就是和这个字段数组进行对比,如果不一致就过滤掉,结果我调试发现,new出来的MODEL根本没有把字段映射加进去,数组直接为空,当然就没法和添加的数据字段一一对应了。这就是错误的关键。
下面就来说解决方法,其实很简单,按照基本的MVC结构,不管是PHP还是JAVA还是.NET都有这样的结构,那么按照严格的标准,MODEL层的代码是必须写的,就是要和数据库的字段做映射。但是很多用mysql的,就直接没有去写MODEL里面的代码。这种习惯被用到了oracle中,就出了问题。
5, 下面针对我上面的数据表写出我的代码:
我的Action是这样的:UserAction.class.php。控制器我只对添加和查找做例子,因此代码如下:
public function index() {
header("Content-Type:text/html; charset=utf-8");
$M_User = new UserModel();
$User_List = $M_User->select();
$this->assign('Title', '用户管理');
$this->assign('UserList', $User_List);
$this->display();
}
//添加用户提交处理
public function Create_Post() {
$M_User = new UserModel();
$data['username'] = $this->_post('username');
$data['password'] = md5($this->_post('pwd'));
if ($M_User->create()) {
$Query_Result = $M_User->add($data);
if (false !== $Query_Result) {
$this->success('用户添加成功');
} else {
$this->error('用户添加错误');
}
} else {
header("Content-Type:text/html; charset=utf-8");
exit($M_User->getError() . ' [ 返 回 ]');
}
}
Action解释:
$M_User=new UserModel();
这个方法最好这么写,因为做.NET的原因,一直都这么写的。针对具体的模型进行实例化,严格规定我就要对User表进行操作了。
获取POST数据的代码就不多解释了。
$M_User->create();
这是ThinkPHP的一个方法,很好,可以帮你过滤掉非法的东西,建议使用。
$Query_Result = $M_User->add($data);
这一段就是数据的添加,我习惯指定要添加的数据,也是因为这一段需要根据$M_User实例化,并过滤字段。当然了,我们只要做好MODEL的代码,就不会有问题。下面的代码就不解释。官方文档都有。
我的Model是这样的:UserModel.class.php
protected $fields = array( 'id', 'username', 'password' );
Model解释:这才是重点,这有这样,new出来的$M_User的映射字段数组才不会为空,这样才能和POST的数据进行对应,才会让过滤方法正常识别,不被过滤。
6,经过了以上的操作,针对Oracle的数据库操作就完成了,我现在也可以任意使用ThinkPHP提供的方法来操作数据了,包括分页(limit),find(),findAll等等。
出处 http://www.cnblogs.com/aceliu/

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Oracle Rac Hard Disk New 및 교체 작업 : 하드 디스크 추가 : 새 디스크 추가, ASM 디스크 그룹 생성, 클러스터에 추가하고 데이터 파일을 이동합니다. 하드 디스크 교체 : 실패 하드 디스크 식별, 디스크 그룹을 닫고, 하드 디스크를 교체하고, 디스크 그룹을 다시 열고, 실패한 디스크를 수리하고, 데이터 파일을 이동하십시오.

C Drive : Registry : 레지스트리 편집기를 사용하여 "Oracle"을 검색하여 설치 경로, 서비스 이름 등을 포함한 정보를 찾기 위해 "Oracle"을 검색하기 위해 "Oracle"을 검색합니다. 파일 시스템 : Oracle 파일은 홈 디렉토리, 시스템 파일, 임시 파일 등을 포함하여 여러 위치에 흩어져 있습니다. 환경 변수 : Oracle_home, Oracle_home, Oracle_home과 같은 환경 변수. 신중한 조치 : Oracle을 제거하면 파일을 삭제해야 할뿐만 아니라 레지스트리 및 서비스를 정리해야합니다. 공식 제거 도구를 사용하거나 전문적인 도움을 구하는 것이 좋습니다. 공간 관리 : C 드라이브에 Oracle 설치를 피하기 위해 디스크 공간을 최적화합니다. 정기적으로 임시 파일을 청소하십시오

Oracle은 여러 가지 중복 제거 쿼리 방법을 제공합니다. 별개의 키워드는 각 열에 고유 한 값을 반환합니다. 그룹 별 조항은 결과를 그룹화하고 각 그룹에 대해 비 반복 값을 반환합니다. 고유 한 키워드는 고유 한 행만 포함 된 인덱스를 만드는 데 사용되며 인덱스 쿼리는 자동으로 망상됩니다. row_number () 함수는 고유 한 숫자를 할당하고 1 행 만 포함하는 결과를 필터링합니다. 최소 () 또는 max () 함수는 숫자 열의 비 반복 값을 반환합니다. 교차 연산자는 두 결과 세트의 공통 값을 반환합니다 (중복 없음).

Oracle Database 파일 시스템은 여러 파일로 구성됩니다. 데이터 파일 : 실제 데이터 저장. 제어 파일 : 데이터베이스 구조 정보를 기록합니다. 다시 로그 파일 : 데이터베이스 수정 작업을 기록합니다. 매개 변수 파일 : 데이터베이스 매개 변수 설정을 포함합니다. 임시 파일 : 중간 결과를 저장합니다. 이러한 파일 유형과 관계를 이해하는 것은 데이터베이스 관리 및 성능 튜닝에 중요합니다. 계획 파일 수, 크기 및 스토리지 미디어는 성능을 최적화하고 데이터 가용성을 보장합니다.

Oracle Database는 신뢰할 수 있고 확장 가능하며 기능이 풍부한 관계형 데이터베이스 관리 시스템 (RDBMS)입니다. 이 아키텍처는 서버 측 구성 요소 (Oracle Net), 인스턴스, 공유 메모리 영역 (SGA), 배경 프로세스 및 데이터를 저장하는 데이터베이스 파일을 포함한 클라이언트 서버 모델을 따릅니다. 기본 개념에는 테이블, 행, 열, 기본 키, 외국 키, 인덱스 및 커서가 포함됩니다. 데이터베이스는 고 가용성, 빅 데이터 지원, 풍부한 기능, 강력한 보안 및 사용 편의성과 같은 장점으로 유명합니다.

Oracle 문자 세트를 수정하려면 다음을 수행해야합니다. 데이터베이스 백업; init.ora 파일에서 문자 세트 설정을 수정합니다. 데이터베이스를 다시 시작하십시오. 기존 테이블과 열을 수정하여 새 문자 세트를 사용하십시오. 데이터를 다시로드하십시오. 데이터베이스 링크 (선택 사항)를 수정하십시오.

Oracle Garbled 문제는 일반적으로 부적절한 캐릭터 세트 설정으로 인해 발생합니다. 솔루션에는 다음이 포함됩니다 : 서버, 데이터베이스 및 클라이언트 문자 세트 확인. 필요에 따라 서버, 데이터베이스 및 클라이언트 문자 세트를 설정하십시오. 변환 함수 또는 dbms_lob.convert_lob 함수를 사용하여 Barlled 데이터를 수정하십시오. 항상 문자 세트를 지정하고 NLS 매개 변수를 올바르게 설정하십시오.

기본 키는 테이블의 각 행을 고유하게 식별하는 특수 열 또는 열의 조합입니다. 테이블의 레코드가 고유하고 다음과 같이 작성할 수 있습니다. Alter Table 문을 사용하여 테이블 이름을 지정합니다. 기본 키어 키워드 다음 열 이름을 추가하여 기본 키로 지정하십시오. 주요 주요 제약 조건은 데이터 고유성을 보장하고, 쿼리 속도를 개선하며, 중복 레코드를 방지하며 테이블 조인을 단순화하는 데 도움이됩니다.
