最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

ThinkPHP連接Oracle數(shù)據(jù)庫的詳細教程

2023-08-18 22:49 作者:左音king  | 我要投稿

ThinkPHP連接Oracle數(shù)據(jù)庫的詳細教程

這里我反復(fù)強調(diào)軟件的“位”,是因為這個很重要,一般情況下,我們系統(tǒng)是64位的,

那么最好軟件也用64位的,但是這里除過系統(tǒng)外,全部選擇32位是有原因的。

一、 操作環(huán)境搭建

系統(tǒng):Windows7 旗艦版 64位

PHP環(huán)境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32位版

ThinkPHP:3.0正式版

Oracle:Orcale_11gR2 32位版

數(shù)據(jù)庫操作工具:PLSQL Developer 32位

開發(fā)工具:NetBeans IDE 7.1.2

說明:這里我反復(fù)強調(diào)軟件的“位”,是因為這個很重要,一般情況下,

我們系統(tǒng)是64位的,那么最好軟件也用64位的,但是這里除過系統(tǒng)外,

全部選擇32位是有原因的,目的是為了配合PLSQL Developer和WAMP的PHP擴展。

因為PLSQL Developer沒有64位版。有的朋友說用64位Oracle數(shù)據(jù)庫,

裝32位客戶端就行,我不想這樣做,如果不喜歡我的操作方式,可以繞道。

當然了,如果你不使用PLSQL Developer,而選擇使用Oracle 自帶的

SQL Developer,那么你全安裝64位或32都是你自己的事。

PHP連接Oracle數(shù)據(jù)庫需要開啟相應(yīng)的擴展,這個擴展也需要數(shù)據(jù)庫客戶端的支持,

因為php擴展也需要對應(yīng)數(shù)據(jù)庫客戶端的位數(shù)。啰嗦完畢。


二、 環(huán)境配置

1, 操作系統(tǒng)的安裝我就不說了,Oracle安裝自己解決,NetBeans IDE 7.1.2也自己解決。

2, Wamp的安裝我也不說了,不會的直接從DOS開始重新學習吧。

3, WAMP會把PHP的網(wǎng)頁文件夾定義在安裝wamp的文件夾下的www里面,

我是安裝在D盤,所以就是D:\WAMP\www。我們暫時不做別的自定義修改。

啟動wamp,系統(tǒng)托盤圖標為綠色表示啟動OK。

4, 打開localhost,看到如下界面,表示環(huán)境配置基本OK。

為什么是基本了,因為還沒有對Oracle的配置進行設(shè)置。

5, 打開如圖的PHP擴展菜單,在綠色圖標上,左鍵->PHP->PHP擴展,

點擊php-oci8的擴展,這時候這個WAMP會重啟,等待重啟后變綠,就表示OK。

6, 再次打開剛才的localhost頁面,如果找到如圖4的顯示,

就表示目前PHP已經(jīng)支持Oracle了。


注意,我現(xiàn)在用的 wamp和oracle客戶端都是32位,如果其中一個是64位,

那么這個oci的擴展時打不開的,同時自動環(huán)境監(jiān)測頁面也沒有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中已經(jīng)有這些文件的顯示了,打開index.php,編寫如下內(nèi)容:

.代碼如下:

php

define('APP_DEBUG', true);

?require './ThinkPHP/ThinkPHP.php';

5, 在瀏覽器中打開localhost/項目名/index.php,

Thinkphp會幫你生成好相關(guān)文件和文件夾。

6, 對配置文件進行操作,找到:

Conf文件夾下config.php文件,修改如下:

. 代碼如下:

php

?return array(

?'DB_TYPE' => 'Oracle', // 數(shù)據(jù)庫類型

?'DB_HOST' => '192.168.0.8', // 服務(wù)器地址

?'DB_NAME' => 'orcl', // 數(shù)據(jù)庫名

?'DB_USER' => 'test', // 用戶名

?'DB_PWD' => 'test', // 密碼

?'DB_PORT' => '1521', // 端口

?);

Oracle數(shù)據(jù)庫和mysql 的結(jié)構(gòu)不同,一般默認安裝的數(shù)據(jù)庫名是orcl,

如果你使用了多個數(shù)據(jù)庫監(jiān)聽,那么就要根據(jù)具體的監(jiān)聽字段來設(shè)置。

比如:我本機數(shù)據(jù)庫堅挺是Orcl,同時監(jiān)聽另外一個外網(wǎng)的數(shù)據(jù)庫,

監(jiān)聽字符串為Orcl2,那么如果你需要連接這個外網(wǎng)數(shù)據(jù)庫,

那么需要寫的數(shù)據(jù)庫名就是orcl2。

7, 經(jīng)過以上的配置,是已經(jīng)可以連接oracle數(shù)據(jù)庫了,

但是在thinkphp的實際操作中有什么注意的地方,且接著往下看。

最近收集了一些關(guān)于THinkPHP連接Oracle數(shù)據(jù)庫的問題,

有很多朋友按照連接mysql的方法來操作,導致有一些方法在Oreale中無法正常使用。

比如說:findAll,Select方法無法使用,獲取不到需要的數(shù)據(jù)。

Create和add方法無法創(chuàng)建和寫入數(shù)據(jù)到數(shù)據(jù)庫中。

其實根據(jù)以前問題我做了幾天調(diào)試,找到了問題所在,

并成功在我自己一個小項目練習中使用正常,

那么現(xiàn)在就將我的經(jīng)驗分享給大家。

1,數(shù)據(jù)庫的連接及配置文件的內(nèi)容我就不說了, 上面已經(jīng)做了解釋。

我這里只根據(jù)一個數(shù)據(jù)表的例子來說明我的操作。

2,表結(jié)構(gòu)如下:

3,這個表中有3個字段,ID主鍵,用戶名username和密碼password,

因為oracle數(shù)據(jù)庫把表名和字段都是轉(zhuǎn)成大寫的,同時不支持ID主鍵自增,

我只有使用另外的方法來實現(xiàn)這個功能,比如:ID自動序列+觸發(fā)器實現(xiàn)ID自增。

4, ThinkPHP中,Action是控制器,Model是模型,視圖是以模板方式體現(xiàn)的。

首先,說控制器,我只做增加和獲取列表的方法介紹。

其次,說模型,這里才是成功的主要原因。為什么?ThinkPHP是有字段映射的,

這個在對MYSQL的支持非常完美,基本不用寫MODEL,但是對ORALCE就不行了,

當使用M->add()來添加數(shù)據(jù)時,字段會被$this->_facade()方法過濾掉。

這樣生成的SQL語句就是沒法執(zhí)行的,肯定是錯誤的,導致數(shù)據(jù)添加不到數(shù)據(jù)庫中,

那么使用select()方法也是一樣被過濾。

再次,當我單步調(diào)試時,斷點被過濾的時候,過濾方法使用到了new出來的MODEL,

這個MODEL會有一個字段映射的數(shù)組在里面,這個過濾方法就是和這個字段數(shù)組

進行對比,如果不一致就過濾掉,結(jié)果我調(diào)試發(fā)現(xiàn),new出來的MODEL根本沒有

把字段映射加進去,數(shù)組直接為空,當然就沒法和添加的數(shù)據(jù)字段一一對應(yīng)了。這

就是錯誤的關(guān)鍵。

下面就來說解決方法,其實很簡單,按照基本的MVC結(jié)構(gòu),

不管是PHP還是JAVA還是.NET都有這樣的結(jié)構(gòu),那么按照嚴格的標準,

MODEL層的代碼是必須寫的,就是要和數(shù)據(jù)庫的字段做映射。

但是很多用mysql的,就直接沒有去寫MODEL里面的代碼。

這種習慣被用到了oracle中,就出了問題。

5, 下面針對我上面的數(shù)據(jù)表寫出我的代碼:

我的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的原因,一直都這么寫的。

針對具體的模型進行實例化,嚴格規(guī)定我就要對User表進行操作了。

獲取POST數(shù)據(jù)的代碼就不多解釋了。

$M_User->create();

這是ThinkPHP的一個方法,很好,可以幫你過濾掉非法的東西,建議使用。

$Query_Result = $M_User->add($data);

這一段就是數(shù)據(jù)的添加,我習慣指定要添加的數(shù)據(jù),也是因為這一段

需要根據(jù)$M_User實例化,并過濾字段。當然了,我們只要做好MODEL的代碼,

就不會有問題。下面的代碼就不解釋。官方文檔都有。

我的Model是這樣的:UserModel.class.php

protected $fields = array( 'id', 'username', 'password' );

Model解釋:這才是重點,這有這樣,new出來的$M_User的映射字段數(shù)組

才不會為空,這樣才能和POST的數(shù)據(jù)進行對應(yīng),才會讓過濾方法正常識別,不被過濾。

6,經(jīng)過了以上的操作,針對Oracle的數(shù)據(jù)庫操作就完成了,我現(xiàn)在也可以

任意使用ThinkPHP提供的方法來操作數(shù)據(jù)了,包括分頁(limit),find(),findAll等等。

本文來源:https://www.fushouyu.com/shouyou/164.html


ThinkPHP連接Oracle數(shù)據(jù)庫的詳細教程的評論 (共 條)

分享到微博請遵守國家法律
定安县| 长顺县| 泗洪县| 海安县| 漳州市| 资阳市| 阳西县| 永仁县| 长寿区| 周口市| 辽源市| 武冈市| 聂荣县| 齐河县| 汾西县| 林芝县| 江山市| 长海县| 玉龙| 井陉县| 儋州市| 台湾省| 渑池县| 什邡市| 平潭县| 临夏市| 河津市| 峡江县| 建瓯市| 收藏| 琼结县| 施秉县| 丁青县| 板桥市| 即墨市| 芜湖市| 宁乡县| 克什克腾旗| 克山县| 嘉定区| 彭泽县|