最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

thinkphp中連接oracle時封裝方法無法用的解決辦法

 更新時間:2013年06月17日 14:45:20   作者:  
本篇文章是對thinkphp中連接oracle時封裝方法無法用的解決方法進行了詳細的分析介紹,需要的朋友參考下
最近收集了一些關(guān)于THinkPHP連接Oracle數(shù)據(jù)庫的問題,有很多朋友按照連接mysql的方法來操作,導(dǎo)致有一些方法在Oreale中無法正常使用。比如說:findAll,Select方法無法使用,獲取不到需要的數(shù)據(jù)。Create和add方法無法創(chuàng)建和寫入數(shù)據(jù)到數(shù)據(jù)庫中。

其實根據(jù)以前問題我做了幾天調(diào)試,找到了問題所在,并成功在我自己一個小項目練習(xí)中使用正常,那么現(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í)行的,肯定是錯誤的,導(dǎo)致數(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里面的代碼。這種習(xí)慣被用到了oracle中,就出了問題。

5,下面針對我上面的數(shù)據(jù)表寫出我的代碼:
我的Action是這樣的:UserAction.class.php??刂破魑抑粚μ砑雍筒檎易隼?,因此代碼如下:

復(fù)制代碼 代碼如下:

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解釋:
復(fù)制代碼 代碼如下:

$M_User=new UserModel();

這個方法最好這么寫,因為做.NET的原因,一直都這么寫的。針對具體的模型進行實例化,嚴格規(guī)定我就要對User表進行操作了。
獲取POST數(shù)據(jù)的代碼就不多解釋了。
復(fù)制代碼 代碼如下:

$M_User->create();

這是ThinkPHP的一個方法,很好,可以幫你過濾掉非法的東西,建議使用。
復(fù)制代碼 代碼如下:

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

這一段就是數(shù)據(jù)的添加,我習(xí)慣指定要添加的數(shù)據(jù),也是因為這一段需要根據(jù)$M_User實例化,并過濾字段。當然了,我們只要做好MODEL的代碼,就不會有問題。下面的代碼就不解釋。官方文檔都有。

我的Model是這樣的:UserModel.class.php
復(fù)制代碼 代碼如下:

?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等等。

連接mysql或許沒有問題,但是在oracle中,封裝的方法無法調(diào)用時,一定要在model層中加入字段的定義。

  • php 轉(zhuǎn)換字符串編碼 iconv與mb_convert_encoding的區(qū)別說明

    php 轉(zhuǎn)換字符串編碼 iconv與mb_convert_encoding的區(qū)別說明

    php 轉(zhuǎn)換字符串編碼 iconv與mb_convert_encoding的區(qū)別說明,需要的朋友可以參考下。
    2011-11-11
  • php判斷終端是手機還是電腦訪問網(wǎng)站的思路及代碼

    php判斷終端是手機還是電腦訪問網(wǎng)站的思路及代碼

    解下來將寫個小程序使用php判斷終端是手機還是電腦訪問網(wǎng)站,感興趣的朋友可以參考下哈,希望對你學(xué)習(xí)php有所幫助
    2013-04-04
  • php array_walk() 數(shù)組函數(shù)

    php array_walk() 數(shù)組函數(shù)

    函數(shù)array_walk():單一數(shù)組回調(diào)函數(shù)---對數(shù)組中的每個成員應(yīng)用用戶函數(shù)
    2011-07-07
  • 使用php 獲取時間今天明天昨天時間戳的詳解

    使用php 獲取時間今天明天昨天時間戳的詳解

    本篇文章是對用php獲取時間今天明天昨天時間戳的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP入門教程之圖像處理技巧分析

    PHP入門教程之圖像處理技巧分析

    這篇文章主要介紹了PHP入門教程之圖像處理技巧,結(jié)合實例形式分析了圖形圖像的創(chuàng)建與顯示方法,并附帶了創(chuàng)建圖形驗證碼及縮略圖等應(yīng)用的具體示例,需要的朋友可以參考下
    2016-09-09
  • PHP新手用的Insert和Update語句構(gòu)造類

    PHP新手用的Insert和Update語句構(gòu)造類

    PHP新手用的Insert和Update語句構(gòu)造類,沒多大功能,學(xué)習(xí)php的朋友可以參考下
    2012-03-03
  • 基于PHP實現(xiàn)的多元線性回歸模擬曲線算法

    基于PHP實現(xiàn)的多元線性回歸模擬曲線算法

    這篇文章主要介紹了基于PHP實現(xiàn)的多元線性回歸模擬曲線算法,結(jié)合具體實例形式分析了多元線性回歸模擬曲線算法的原理與相關(guān)php實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • redis+php實現(xiàn)微博(二)發(fā)布與關(guān)注功能詳解

    redis+php實現(xiàn)微博(二)發(fā)布與關(guān)注功能詳解

    這篇文章主要介紹了redis+php實現(xiàn)微博發(fā)布與關(guān)注功能,結(jié)合實例形式分析了php結(jié)合redis實現(xiàn)微博的發(fā)布及關(guān)注相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • 隊列在編程中的實際應(yīng)用(php)

    隊列在編程中的實際應(yīng)用(php)

    隊列(Queue)是運算受到限制的一種線性表。只允許在表的一端進行插入,而在另一端進行刪除元素的線性表。隊尾(rear)是允許插入的一端。隊頭(front)是允許刪除的一端。空隊列是不含元素的空表。
    2010-09-09
  • 最新評論

    南涧| 甘德县| 潼关县| 玉龙| 沅江市| 富民县| 新竹县| 宁波市| 简阳市| 德昌县| 府谷县| 航空| 藁城市| 西城区| 孝感市| 兰溪市| 济南市| 襄垣县| 哈巴河县| 阳曲县| 民丰县| 大英县| 商河县| 潢川县| 乌兰浩特市| 柘荣县| 石嘴山市| 宜章县| 兰考县| 达孜县| 泽普县| 精河县| 五家渠市| 九龙坡区| 塘沽区| 明光市| 肥城市| 马尔康县| 神农架林区| 临沧市| 安岳县|