日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

thinkphp的增删改查

發(fā)布時間:2023/12/13 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinkphp的增删改查 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ThinkPHP 添加數(shù)據(jù) add 方法



ThinkPHP 內(nèi)置的 add 方法用于向數(shù)據(jù)表添加數(shù)據(jù),相當于 SQL 中的 INSERT INTO 行為。
ThinkPHP Insert 添加數(shù)據(jù)

添加數(shù)據(jù) add 方法是 CURD(Create,Update,Read,Delete / 創(chuàng)建,修改,讀取,刪除)中的 Create 的實現(xiàn),ThinkPHP 支持以普通數(shù)組方式和面向?qū)ο蠓绞綄?shù)據(jù)寫入數(shù)據(jù)表。

現(xiàn)在以《PHP MySQL 數(shù)據(jù)庫教程》中操作 user 表數(shù)據(jù)的例子(具體參見:MySQL Insert into 添加數(shù)據(jù))為例,來演示如何在 ThinkPHP 中實現(xiàn)對數(shù)據(jù)表的數(shù)據(jù)添加操作。

例子:

在 IndexAction 控制器(Lib/Action/IndexAction.class.php)里,添加 insert() 操作:
  • public?function?insert(){?
  • header("Content-Type:text/html;?charset=utf-8");?
  • $Dao?=?M("User");?//?實例化模型類?
  • ?
  • //?構(gòu)建寫入的數(shù)據(jù)數(shù)組?
  • $data["username"]?=?"大部落";?
  • $data["password"]?=?md5("123456");?
  • $data["email"]?=?"12345@163.com";?
  • $data["regdate"]?=?time();?
  • ?
  • //?寫入數(shù)據(jù)?
  • if($lastInsId?=?$Dao->add($data)){?
  • echo?"插入數(shù)據(jù)?id?為:$lastInsId";?
  • }?else?{?
  • $this->error('數(shù)據(jù)寫入錯誤!');?
  • }?
  • }
  • 訪問執(zhí)行該操作:http://127.0.0.1/html/Myapp/index.php/Index/insert
    語法解讀

    M("User") 用于高效實例化一個數(shù)據(jù)模型(M 是 new Model 的簡寫,稱為快捷方法),參數(shù)為要操作的表名。
    接下來構(gòu)建要保存數(shù)據(jù)的數(shù)組 $data 。
    最后是用 add() 方法將數(shù)據(jù)寫入庫表,由于使用的是 M快捷方法,需要將 $data 數(shù)組傳入 add() 方法。
    add() 方法如果添加數(shù)據(jù)記錄成功,返回的是新數(shù)據(jù)記錄主鍵,可直接得到。

    該例子實際運行的 SQL 為:

  • INSERT?INTO?user(username,password,email,regdate)?VALUES?('大部落','e10adc3949ba59abbe56e057f20f883e',?
  • '12345@163.com',1283612673)

  • 提示:運行該例子,請確認在配置文件里正確配置了數(shù)據(jù)庫的相關(guān)賬號密碼等信息,具體參見《ThinkPHP 項目配置》
    對象方式添加數(shù)據(jù)

    上面的方式是以構(gòu)造數(shù)據(jù)數(shù)組的方式,然后將數(shù)據(jù)以參數(shù)形式傳入 add 方法寫入數(shù)據(jù)表。ThinkPHP 也支持以對象的方式將數(shù)據(jù)寫入數(shù)據(jù)表,將上面的代碼更改為:
  • public?function?insert(){?
  • header("Content-Type:text/html;?charset=utf-8");?
  • $Dao?=?M("User");?//?實例化模型類?
  • ?
  • //?數(shù)據(jù)對象賦值?
  • $Dao->username?=?"大部落";?
  • $Dao->password?=?md5("123456");?
  • $Dao->email?=?"12345@163.com";?
  • $Dao->regdate?=?time();?
  • ?
  • //?寫入數(shù)據(jù)?
  • if($lastInsId?=?$Dao->add()){?
  • echo?"插入數(shù)據(jù)?id?為:$lastInsId";?
  • }?else?{?
  • $this->error('數(shù)據(jù)寫入錯誤!');?
  • }?
  • }
  • 對象方式除了數(shù)據(jù)以數(shù)據(jù)對象方式賦值外,在調(diào)用 add 方法寫入數(shù)據(jù)的時候不需要傳遞參數(shù)

    ThinkPHP 表單數(shù)據(jù)智能寫入 create 方法

    創(chuàng)建數(shù)據(jù)對象 create()

    除了手動構(gòu)造入庫的數(shù)據(jù)集之外,ThinkPHP 還提供了自動創(chuàng)建數(shù)據(jù)對象的 create() 方法。create() 方法將自動收集提交的表單數(shù)據(jù)并創(chuàng)建數(shù)據(jù)對象而無需人工干預(yù),這在表單

    數(shù)據(jù)字段非常多的情況下更具優(yōu)勢。

    將前文寫入表單數(shù)據(jù)的例子用 create() 來實現(xiàn):

  • public?function?insert2(){?
  • header("Content-Type:text/html;?charset=utf-8");?
  • $Dao?=?M("User");?
  • ?
  • if($Dao->create()){?
  • $Dao->password?=?md5($_POST["password"]);?
  • $Dao->regdate?=?time();?
  • if($lastInsId?=?$Dao->add()){?
  • echo?"插入數(shù)據(jù)?id?為:$lastInsId";?
  • }?else?{?
  • echo?"數(shù)據(jù)寫入錯誤!";?
  • }?
  • }else{?
  • exit($Dao->getError().'?[?<a?href="javascript:history.back()">返?回</a>?]');?
  • }?
  • }?
  • create() 創(chuàng)建數(shù)據(jù)對象后,將自動收集提交過來的表單數(shù)據(jù)。而表單數(shù)據(jù)可能需要經(jīng)過一定加工(例如將密碼加密)才能寫入數(shù)據(jù)表,所以可以對數(shù)據(jù)對象的成員屬性值根據(jù)進行修改或添加去除等。
    提示:create() 創(chuàng)建的數(shù)據(jù)對象存放于內(nèi)存,在執(zhí)行入庫動作(add() 或 save())之前,都可以進行修改。
    在上面的例子里,create()方法 的行為和 date()方法 是一致。但 date() 方法只是簡單的創(chuàng)建數(shù)據(jù)對象,但 create() 方法還具備:
    令牌驗證
    數(shù)據(jù)自動驗證
    字段映射支持
    字段類型檢查
    數(shù)據(jù)自動完成
    等各種高級的數(shù)據(jù)功能,要完成這些高級數(shù)據(jù)模型功能,需要使用 D方法 實例化數(shù)據(jù)模型。

    在 LibModel 目錄下創(chuàng)建 UserModel.class.php 文件(User 為創(chuàng)建的模型對象,也對應(yīng) 前綴_user 表),加入自動驗證和自動填充規(guī)則:
  • class?UserModel?extends?Model{?
  • //?自動驗證設(shè)置?
  • protected?$_validate?=?array(?
  • array('username','require','用戶名必須填寫!',1),?
  • array('email','email','郵箱格式錯誤!',2),?
  • array('username','','用戶名已經(jīng)存在!',0,'unique',1),?
  • );?
  • //自動填充設(shè)置?
  • protected?$_auto?=?array(?
  • array('regdate','time',self::MODEL_INSERT,'function'),?
  • array('password','md5',self::MODEL_INSERT,'function'),?
  • );?
  • }

  • 將 insert2 操作更改為:

  • public?function?insert2(){?
  • header("Content-Type:text/html;?charset=utf-8");?
  • $Dao?=?D("User");?
  • ?
  • if($Dao->create()){?
  • if($lastInsId?=?$Dao->add()){?
  • echo?"插入數(shù)據(jù)?id?為:$lastInsId";?
  • }?else?{?
  • echo?"數(shù)據(jù)寫入錯誤!";?
  • }?
  • }else{?
  • exit($Dao->getError().'?[?<a?href="javascript:history.back()">返?回</a>?]');?
  • }?
  • }

  • 如果提交的數(shù)據(jù)不符合驗證要求(如用戶名存在),則 create() 創(chuàng)建數(shù)據(jù)對象失敗(返回 FALSE ),$Dao->getError() 會打印出自動驗證設(shè)置規(guī)則里面設(shè)置的提示信息:用戶名已經(jīng)存在!
    如果驗證規(guī)則通過后,系統(tǒng)會進行自動填充設(shè)置,將表單密碼進行 MD5 加密以及取得當前的時間戳填充入 create() 的數(shù)據(jù)對象。
    所以 D方法 配合 create() 是非常智能而強大的,恰當運用可以達到事半功倍快速開發(fā)的目的。
    提示
    D 方法配合 create() 由于其功能強大,也就損失了一定的效率,在業(yè)務(wù)邏輯不復(fù)雜的情況下推薦 M方法+data() 模式create() 默認接受 POST 數(shù)據(jù),若要接受其他類型數(shù)據(jù),只需在參數(shù)內(nèi)指定即可,如接受 GET 數(shù)據(jù):create($_GET)

    ThinkPHP 查詢數(shù)據(jù)?方法




    ThinkPHP 查詢數(shù)據(jù)主要提供以下幾類查詢:

    select:普通查詢,同 findAll() 方法
    find:取得符合查詢條件的一條記錄
    getBy動態(tài)查詢:根據(jù)某個字段取得符合查詢條件的一條記錄
    getField:獲取某個字段的值或多個字段的索引數(shù)組
    區(qū)間查詢:取得符合查詢條件的區(qū)間記錄
    統(tǒng)計查詢:取得符合查詢條件的統(tǒng)計數(shù)據(jù)
    定位查詢:取得符合查詢條件的一條或多條記錄
    原生SQL查詢:支持以原生 SQL 進行查詢或執(zhí)行操作

    select()

    select() 是 ThinkPHP 中最常用的普通查詢方法,得到的是一個二維數(shù)組。findAll() 為 select() 方法的別名

    ,并建議使用 select()

    讀取操作

    下面的例子將 user 表的所有數(shù)據(jù)讀取出來并顯示:

  • public?function?read(){?
  • $Dao?=?M("User");?
  • ?
  • //?查詢數(shù)據(jù)?
  • $list?=?$Dao->select();?
  • //dump($list);?//?用?dump()?可以在調(diào)試階段查看數(shù)據(jù)是否已讀取?
  • ?
  • //?模板變量賦值?
  • $this->assign("list",?$list);?
  • //?輸出模板?
  • $this->display();?
  • }?

  • 假設(shè)上面的例子對應(yīng)的 class 文件為 Lib/Action/IndexAction.class.php ,那么對應(yīng)的模板文件為

    Tpl/default/Index/read.html。
    數(shù)據(jù)顯示模板

    模板文件用于顯示剛才讀取的 User 表的數(shù)據(jù)。在學(xué)習(xí)階段,要不想使用模板,也可以直接使用 foreach 語法在

    read() 操作內(nèi)直接顯示讀取的數(shù)據(jù)。下面是模板相應(yīng)的代碼片段,我們將讀取的數(shù)據(jù)在一個表格中顯示出來:

  • "1">?
  • ?
  • 注冊時間?
  • ?
  • "list"?id="vo">?
  • ?
  • {$vo['username']}?
  • {$vo['email']}?
  • {$vo['regdate']|date='Y-m-d?H:i',###}?
  • ?
  • ?
  • ?
  • "10%">ID?
  • "1">?
  • ?
  • 注冊時間?
  • ?
  • "list"?id="vo">?
  • ?
  • {$vo['username']}?
  • {$vo['email']}?
  • {$vo['regdate']|date='Y-m-d?H:i',###}?
  • ?
  • ?
  • ?
  • "30%">用戶名?
  • "1">?
  • ?
  • 注冊時間?
  • ?
  • "list"?id="vo">?
  • ?
  • {$vo['username']}?
  • {$vo['email']}?
  • {$vo['regdate']|date='Y-m-d?H:i',###}?
  • ?
  • ?
  • ?
  • "30%">電子郵件?
  • "1">?
  • ?
  • 注冊時間?
  • ?
  • "list"?id="vo">?
  • ?
  • {$vo['username']}?
  • {$vo['email']}?
  • {$vo['regdate']|date='Y-m-d?H:i',###}?
  • ?
  • ?
  • ?
  • "1">?
  • ?
  • 注冊時間?
  • ?
  • "list"?id="vo">?
  • ?
  • {$vo['username']}?
  • {$vo['email']}?
  • {$vo['regdate']|date='Y-m-d?H:i',###}?
  • ?
  • ?
  • ?

  • 要了解更多關(guān)于 ThinkPHP模板 的知識,請參閱:《ThinkPHP 模板》。
    field() 查詢指定字段

    select() 方法默認是查詢所有字段的數(shù)據(jù),如果要查詢某個或某些字段,就需要使用 filed() 方法。

    filed() 是屬于 ThinkPHP 連貫操作 中的一個方法,如在上面的例子中,只查詢用戶名和電子郵件地址,則查詢

    方法對應(yīng)更改為:

    $list = $Dao->field('username,email')->select();

    使用查詢條件

    使用 ThinkPHP 連貫操作 可以很方便的對數(shù)據(jù)查詢使用查詢條件。下面是一些簡單的查詢條件的例子。
    where() 條件

  • ?//?構(gòu)造查詢條件?
  • $condition['username']?=?'Admin';?
  • //?查詢數(shù)據(jù)?
  • $list?=?$Dao->where($condition)->select();

  • 上述查詢的就是 username='Admin' 這個條件的數(shù)據(jù)。關(guān)于 ThinkPHP where 條件更詳細資料,請參閱

    《ThinkPHP Where 條件》。
    ORDER BY 排序

    在查詢中使用 ORDER BY 對數(shù)據(jù)進行排序:

  • //?查詢數(shù)據(jù)?
  • list?=?$Dao->order('uid?DESC')->select();

  • 這個例子就是數(shù)據(jù)按照 ORDER BY uid DESC 進行查詢,而 order() 方法中的參數(shù)意義跟 SQL 語句中的意義完全

    一致。
    LIMIT 限制

    在查詢中使用 LIMIT 限定數(shù)據(jù)返回的記錄數(shù):

  • //?查詢數(shù)據(jù)?
  • $list?=?$Dao->limit('4,5')->select();

  • 這個例子就是將第 5-10 條記錄取出,limit() 方法內(nèi)的參數(shù)意義跟 SQL 語句中的 LIMIT 完全一致。
    連貫操作

    ThinkPHP 中允許將數(shù)據(jù)對象中的各個方法寫在一起操作,如:

  • $list?=?$Dao->order('uid?DESC')->limit('4,5')->select();

  • 這就是連貫操作,關(guān)于連貫操作更詳細的介紹,參見《ThinkPHP 連貫操作》。
    原生SQL查詢有 query() 和 execute() 兩個方法:

    query():用于 SQL 查詢操作,并返回符合查詢條件的數(shù)據(jù)集
    execute():更新和寫入數(shù)據(jù)的 SQL 操作,返回影響的記錄數(shù)

    query()

    query() 方法是用于 SQL 查詢操作,和select()方法一樣返回符合查詢條件的數(shù)據(jù)集。

    例子:

  • public?function?read(){?
  • //?實例化一個空模型,沒有對應(yīng)任何數(shù)據(jù)表?
  • $Dao?=?M();?
  • //或者使用?$Dao?=?new?Model();?
  • ?
  • $list?=?$Dao->query("select?*?from?user?where?uid<5");?
  • if($list){?
  • $this->assign('list',?$list?);?
  • $this->display();?
  • }?else?{?
  • $this->error($Dao->getError());?
  • }?
  • }

  • 對于 query() 方法返回的數(shù)據(jù)集,跟 select() 一樣,可以在模板里直接循環(huán)輸出。
    execute()

    execute() 方法用于更新和寫入數(shù)據(jù)的 SQL 操作(注:非查詢操作,無返回數(shù)據(jù)集),返回影響的記錄數(shù)。

    例子:

  • public?function?read(){?
  • header("Content-Type:text/html;?charset=utf-8");?
  • //?實例化一個空模型,沒有對應(yīng)任何數(shù)據(jù)表?
  • $Dao?=?M();?
  • //或者使用?$Dao?=?new?Model();?
  • ?
  • $num?=?$Dao->execute("update?user?set?email?=?'12345@xxx.com'?where?uid=3");?
  • if($num){?
  • echo?'更新?',$num,'?條記錄。';?
  • }else{?
  • echo?'無記錄更新';?
  • }?
  • }

  • 如果查詢比較復(fù)雜或一些特殊的數(shù)據(jù)操作不能通過 ThinkPHP 內(nèi)置的 ORM 和 ActiveRecord 模式實現(xiàn)時,就可以通過直接使用原生 SQL 查詢來實現(xiàn)。

    注意:以上都是 user 沒有表前綴的例子,在查詢語句中,查詢的表應(yīng)該寫實際的表名字(包括前綴)。
    小技巧

    原生 SQL 查詢需要在查詢語句中寫上對應(yīng)的表名,如果表名有改動的時候,就需要逐行去更改 SQL 語句中的表名字,這樣不免麻煩。ThinkPHP 提供了一個小技巧來幫助解決這個問題。

    在 SQL 語句中,以 __TABLE__ 來替代真實的表名,而在實例化模型時,仍以表名為參數(shù),如:

  • public?function?read(){?
  • $Dao?=?M("User");?
  • $list?=?$Dao->query("select?__TABLE__?from?user?where?uid<5");?
  • ?
  • }

  • 系統(tǒng)在解析的時候會自動替換成當前模型對應(yīng)的表名,這樣就可以做到即使表名有所變化,只需修改實例化對應(yīng)的表名即可而不用修改原生的 SQL 語句。

    總結(jié)

    以上是生活随笔為你收集整理的thinkphp的增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。