백엔드 개발 PHP 튜토리얼 ThinkPHP 连接Oracle数据库的详细教程[全]_PHP教程

ThinkPHP 连接Oracle数据库的详细教程[全]_PHP教程

Jul 21, 2016 pm 03:17 PM
oracle thinkphp windows7 하나 짓다 작동하다 지도 시간 데이터 베이스 기함 환경 ~의 체계 상세한 연결하다

一、 操作环境搭建

系统: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/

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/325643.htmlTechArticle一、操作环境搭建 系统:Windows7 旗舰版 64位 PHP环境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32位版 下载地址:http://www.wampserver.com/en/ ThinkPH...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Oracle RAC에서 하드 디스크를 추가하고 교체하는 방법 Oracle RAC에서 하드 디스크를 추가하고 교체하는 방법 Apr 11, 2025 pm 05:39 PM

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

C 디스크에 설치된 Oracle 데이터베이스는 무엇입니까? C 디스크에 설치된 Oracle 데이터베이스는 무엇입니까? Apr 11, 2025 pm 04:21 PM

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

Oracle을 수반하는 방법 Oracle을 수반하는 방법 Apr 11, 2025 pm 07:33 PM

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

Oracle의 데이터베이스로 어떤 유형의 파일이 구성됩니까? Oracle의 데이터베이스로 어떤 유형의 파일이 구성됩니까? Apr 11, 2025 pm 04:18 PM

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

Oracle 데이터베이스의 기본 지식 요약 Oracle 데이터베이스의 기본 지식 요약 Apr 11, 2025 pm 06:33 PM

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

Oracle 문자 세트를 수정하는 방법 Oracle 문자 세트를 수정하는 방법 Apr 11, 2025 pm 06:57 PM

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

Oracle Garbled 코드를 다루는 방법 Oracle Garbled 코드를 다루는 방법 Apr 11, 2025 pm 07:00 PM

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

Oracle에서 기본 주요 제약 조건을 만드는 방법 Oracle에서 기본 주요 제약 조건을 만드는 방법 Apr 11, 2025 pm 07:15 PM

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

See all articles