亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在ThinkPHP中連接Oracle數據庫

發布時間:2021-03-05 16:14:59 來源:億速云 閱讀:432 作者:Leah 欄目:開發技術

這篇文章給大家介紹怎么在ThinkPHP中連接Oracle數據庫,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

thinkphp是什么

thinkphp屬于一種免費的開發框架,能夠用于開發前端網頁,最早thinkphp是為了簡化開發而產生的,thinkphp同時也是遵循Apache2協議,最初是從Struts演變過來,也把國外一些好的框架模式進行利用,使用面向對象的開發結構,兼容了很多標簽庫等模式,它能夠更方便和快捷的開發和部署應用,當然不僅僅是企業級應用,任何php應用開發都可以從thinkphp的簡單、兼容和快速的特性中受益。

一、操作環境搭建

系統:Windows7 旗艦版 64位

二、環境配置

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

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

3,WAMP會把PHP的網頁文件夾定義在安裝wamp的文件夾下的www里面,我是安裝在D盤,所以就是D:\WAMP\www。我們暫時不做別的自定義修改。啟動wamp,系統托盤圖標為綠色表示啟動OK。

怎么在ThinkPHP中連接Oracle數據庫

4,打開localhost,看到如下界面,表示環境配置基本OK。為什么是基本了,因為還沒有對Oracle的配置進行設置。

怎么在ThinkPHP中連接Oracle數據庫

5,打開如圖的PHP擴展菜單,在綠色圖標上,左鍵->PHP->PHP擴展,點擊php-oci8的擴展,這時候這個WAMP會重啟,等待重啟后變綠,就表示OK。

怎么在ThinkPHP中連接Oracle數據庫

6,再次打開剛才的localhost頁面,如果找到如圖4的顯示,就表示目前PHP已經支持Oracle了。

怎么在ThinkPHP中連接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,編寫如下內容:

<?php
 define('APP_DEBUG', true);
 require './ThinkPHP/ThinkPHP.php';

5,在瀏覽器中打開localhost/項目名/index.php,Thinkphp會幫你生成好相關文件和文件夾。
6,對配置文件進行操作,找到:Conf文件夾下config.php文件,修改如下:

<?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,表結構如下:

怎么在ThinkPHP中連接Oracle數據庫

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() . ' [ <a href="javascript:history.back()">返 回</a> ]');
  }
}

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

'id', 'username', 'password');

Model解釋:這才是重點,這有這樣,new出來的$M_User的映射字段數組才不會為空,這樣才能和POST的數據進行對應,才會讓過濾方法正常識別,不被過濾。

6,經過了以上的操作,針對Oracle的數據庫操作就完成了,我現在也可以任意使用ThinkPHP提供的方法來操作數據了,包括分頁(limit),find(),findAll等等。

關于怎么在ThinkPHP中連接Oracle數據庫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青冈县| 镇雄县| 郧西县| 遵义县| 台南市| 墨竹工卡县| 黔江区| 永州市| 浑源县| 绥阳县| 含山县| 图片| 九龙县| 泽普县| 盐边县| 大足县| 德格县| 堆龙德庆县| 龙门县| 蒙城县| 东方市| 洞头县| 清新县| 尉氏县| 博罗县| 金门县| 万宁市| 始兴县| 冕宁县| 华蓥市| 武乡县| 公主岭市| 浦江县| 石家庄市| 明光市| 凉城县| 磐石市| 天津市| 柞水县| 博白县| 浦东新区|