麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > PHP > 正文

ThinkPHP數(shù)據(jù)操作方法總結(jié)

2024-05-04 23:39:18
字體:
供稿:網(wǎng)友

這篇文章主要介紹了ThinkPHP數(shù)據(jù)操作方法,以實(shí)例形式較為詳細(xì)的分析總結(jié)了ThinkPHP添加、更新、查詢及刪除數(shù)據(jù)的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例總結(jié)了ThinkPHP數(shù)據(jù)操作方法。分享給大家供大家參考。具體如下:

一、ThinkPHP Insert 添加數(shù)據(jù)

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

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

現(xiàn)在以《PHP MySQL 數(shù)據(jù)庫教程》中操作 user 表數(shù)據(jù)的例子(具體參見:PHP+MySQL之Insert Into數(shù)據(jù)插入用法分析)為例,來演示如何在 ThinkPHP 中實(shí)現(xiàn)對(duì)數(shù)據(jù)表的數(shù)據(jù)添加操作。

例子:

在 IndexAction 控制器(Lib/Action/IndexAction.class.php)里,添加 insert() 操作:

 

 
  1. public function insert() 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = M("User"); // 實(shí)例化模型類 // 構(gòu)建寫入的數(shù)據(jù)數(shù)組 
  4. $data["username"] = "小王"
  5. $data["password"] = md5("123456"); 
  6. $data["email"] = [email protected]
  7. $data["regdate"] = time(); // 寫入數(shù)據(jù) 
  8. if($lastInsId = $Dao->add($data)) 
  9. echo "插入數(shù)據(jù) id 為:$lastInsId"
  10. else { 
  11. $this->error('數(shù)據(jù)寫入錯(cuò)誤!'); 

訪問執(zhí)行該操作:http://127.0.0.1/html/Myapp/index.php/Index/insert

語法解讀

M("User") 用于高效實(shí)例化一個(gè)數(shù)據(jù)模型(M 是 new Model 的簡寫,稱為快捷方法),參數(shù)為要操作的表名。

接下來構(gòu)建要保存數(shù)據(jù)的數(shù)組 $data 。

最后是用 add() 方法將數(shù)據(jù)寫入庫表,由于使用的是 M快捷方法,需要將 $data 數(shù)組傳入 add() 方法。

add() 方法如果添加數(shù)據(jù)記錄成功,返回的是新數(shù)據(jù)記錄主鍵,可直接得到。

該例子實(shí)際運(yùn)行的 SQL 為:

 

 
  1. INSERT INTO user 
  2. (username,password,email,regdate) 
  3. VALUES 
  4. ('小王','e10adc3949ba59abbe56e057f20f883e','[email protected]',1283612673) 

提示:運(yùn)行該例子,請(qǐng)確認(rèn)在配置文件里正確配置了數(shù)據(jù)庫的相關(guān)賬號(hào)密碼等信息,具體參見《ThinkPHP公共配置文件與各自項(xiàng)目中配置文件組合的方法》

對(duì)象方式添加數(shù)據(jù)

上面的方式是以構(gòu)造數(shù)據(jù)數(shù)組的方式,然后將數(shù)據(jù)以參數(shù)形式傳入 add 方法寫入數(shù)據(jù)表。ThinkPHP 也支持以對(duì)象的方式將數(shù)據(jù)寫入數(shù)據(jù)表,將上面的代碼更改為:

 

 
  1. public function insert() 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = M("User"); // 實(shí)例化模型類 // 數(shù)據(jù)對(duì)象賦值 
  4. $Dao->username = "小王"
  5. $Dao->password = md5("123456"); 
  6. $Dao->email = [email protected]
  7. $Dao->regdate = time(); // 寫入數(shù)據(jù) 
  8. if($lastInsId = $Dao->add()){ echo "插入數(shù)據(jù) id 為:$lastInsId"
  9. else { 
  10. $this->error('數(shù)據(jù)寫入錯(cuò)誤!'); 

對(duì)象方式除了數(shù)據(jù)以數(shù)據(jù)對(duì)象方式賦值外,在調(diào)用 add 方法寫入數(shù)據(jù)的時(shí)候不需要傳遞參數(shù)。

二、ThinkPHP 更新數(shù)據(jù) save方法

save()

ThinkPHP 中使用 save() 方法來更新數(shù)據(jù)庫,并且也支持連貫操作的使用。

例子:

 

 
  1. public function update(){ 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = M("User"); // 需要更新的數(shù)據(jù) 
  4. $data['email'] = '[email protected]'
  5. // 更新的條件 $condition['username'] = 'Jack'; 
  6. $result = $Dao->where($condition)->save($data); 
  7. //或者:$resul t= $Dao->where($condition)->data($data)->save(); 
  8. if($result !== false){ echo '數(shù)據(jù)更新成功!'
  9. else
  10. echo '數(shù)據(jù)更新失敗!'

上面例子執(zhí)行的 SQL 語句為:

UPDATE user SET email='[email protected]' WHERE username='Jack'

提示

為了保證數(shù)據(jù)庫的安全,避免出錯(cuò)更新整個(gè)數(shù)據(jù)表,如果沒有任何更新條件,數(shù)據(jù)對(duì)象本身也不包含主鍵字段的話,save方法不會(huì)更新任何數(shù)據(jù)庫的記錄。

因此要使用 save() 方法更新數(shù)據(jù),必須指定更新條件或者更新的數(shù)據(jù)中包含主鍵字段。

使用主鍵的例子:

 

 
  1. public function update(){ 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = M("User"); // 需要更新的數(shù)據(jù) 
  4. $data['email'] = '[email protected]'; $data['uid'] = 2; 
  5. $result = $Dao->save($data); 
  6. if($result !== false
  7. echo '數(shù)據(jù)更新成功!'
  8. }else
  9. echo '數(shù)據(jù)更新失敗!'

如果需要更新的數(shù)據(jù)里面包含主鍵,那么 ThinkPHP 會(huì)自動(dòng)把主鍵的值作為條件來更新。

上面的例子跟下面的效果相同:

// 需要更新的數(shù)據(jù) $data['email'] = '[email protected]';

// 更新的條件 $condition['uid'] = 2; $result = $Dao->where($condition)->save($data);

如果是表單數(shù)據(jù),還可以使用 create() 方法創(chuàng)建數(shù)據(jù)對(duì)象來更新數(shù)據(jù):

 

  1. public function update(){ 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = D("User"); 
  4. if($vo = $Dao->create()) 
  5. { $result = $Dao->save(); 
  6. if($result !== false
  7. { echo '數(shù)據(jù)更新成功!'
  8. }else
  9. echo '數(shù)據(jù)更新失敗!'
  10. } } 
  11. else
  12. $this->error($Form->getError()); 

如果更新的數(shù)據(jù)需要做邏輯處理,可以在操作類以對(duì)象的方式處理或者在模型內(nèi)處理,具體可參考《ThinkPHP 表單數(shù)據(jù)智能寫入 create 方法》。

注意:以create() 方法創(chuàng)建數(shù)據(jù)對(duì)象來更新數(shù)據(jù),表單中必須包含一個(gè)以主鍵為名稱的隱藏域,才能完成保存操作。

三、ThinkPHP 查詢數(shù)據(jù) select(findAll)方法

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

select:普通查詢,同 findAll() 方法

find:取得符合查詢條件的一條記錄

getBy動(dòng)態(tài)查詢:根據(jù)某個(gè)字段取得符合查詢條件的一條記錄

getField:獲取某個(gè)字段的值或多個(gè)字段的索引數(shù)組

區(qū)間查詢:取得符合查詢條件的區(qū)間記錄

統(tǒng)計(jì)查詢:取得符合查詢條件的統(tǒng)計(jì)數(shù)據(jù)

定位查詢:取得符合查詢條件的一條或多條記錄

原生SQL查詢:支持以原生 SQL 進(jìn)行查詢或執(zhí)行操作

select()

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

讀取操作

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

 

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

假設(shè)上面的例子對(duì)應(yīng)的 class 文件為 Lib/Action/IndexAction.class.php ,那么對(duì)應(yīng)的模板文件為 Tpl/default/Index/read.html。

數(shù)據(jù)顯示模板

模板文件用于顯示剛才讀取的 User 表的數(shù)據(jù)。在學(xué)習(xí)階段,要不想使用模板,也可以直接使用 foreach 語法在 read() 操作內(nèi)直接顯示讀取的數(shù)據(jù)。下面是模板相應(yīng)的代碼片段,我們將讀取的數(shù)據(jù)在一個(gè)表格中顯示出來:

 

  1. <table border="1"
  2. <tr> 
  3. <th width="10%">ID</th> 
  4. <th width="30%">用戶名</th> 
  5. <th width="30%">電子郵件</th> 
  6. <th>注冊(cè)時(shí)間</th> 
  7. </tr> 
  8. <volist name="list" id="vo"
  9. <tr> 
  10. <td align="center">{$vo['uid']}</td> 
  11. <td>{$vo['username']}</td> 
  12. <td>{$vo['email']}</td> 
  13. <td>{$vo['regdate']|date='Y-m-d H:i',###}</td> 
  14. </tr> 
  15. </volist> 
  16. </table> 

要了解更多關(guān)于 ThinkPHP模板的知識(shí),請(qǐng)參閱:《ThinkPHP 模板》。

field() 查詢指定字段

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

filed() 是屬于 ThinkPHP 連貫操作中的一個(gè)方法,如在上面的例子中,只查詢用戶名和電子郵件地址,則查詢方法對(duì)應(yīng)更改為:

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

使用查詢條件

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

where() 條件

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

上述查詢的就是 username='Admin' 這個(gè)條件的數(shù)據(jù)。關(guān)于 ThinkPHP where 條件更詳細(xì)資料,請(qǐng)參閱《ThinkPHP Where 條件》。

ORDER BY 排序

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

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

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

LIMIT 限制

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

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

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

連貫操作

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

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

這就是連貫操作,關(guān)于連貫操作更詳細(xì)的介紹,參見《ThinkPHP 連貫操作》。

四、ThinkPHP 刪除數(shù)據(jù)記錄 delete 方法

ThinkPHP 中使用 delete() 方法來刪除數(shù)據(jù)庫中的數(shù)據(jù)記錄,并且也支持連貫操作的使用。delete() 方法執(zhí)行成功返回操作影響(刪除)的記錄數(shù)。

例子:

 

 
  1. public function del(){ 
  2. header("Content-Type:text/html; charset=utf-8"); 
  3. $Dao = M("User"); // 刪除 uid=5 的數(shù)據(jù)記錄 
  4. $result = $Dao->where('uid = 5')->delete(); 
  5. if($result !== false){ 
  6. echo '刪除 ',$result,' 條數(shù)據(jù)。'
  7. }else
  8. echo '刪除數(shù)據(jù)失敗!'

上面例子執(zhí)行的 SQL 為:

DELETE FROM user WHERE uid = 5

delete() 方法可以用于刪除單個(gè)或者多個(gè)數(shù)據(jù),主要取決于 where() 刪除條件。另外也可以配合連貫操作中的其他方法如 order()、limit() 等構(gòu)造出更符合需要的刪除條件:

 

 
  1. $Dao = M("User"); 
  2. $result = $Dao->where('status=0')->order('regdate ASC')->limit('5')->delete(); 

上面例子根據(jù)用戶注冊(cè)時(shí)間降序排列,刪除 5 條 status=0 的用戶記錄。

希望本文所述對(duì)大家基于ThinkPHP框架的php程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久一区二区 | 久久久久久久久久久久久久久伊免 | 中文字幕在线免费看 | 中午日产幕无线码1区 | 亚洲日色| 欧美成人高清视频 | 中文字幕激情 | 黄色视屏免费看 | www.91成人| 久久最新免费视频 | 日韩毛片一区二区三区 | 国产超碰人人做人人爱 | 亚洲精品a在线观看 | 国产精品1区2区在线观看 | 亚洲一区二区在线 | 国产亚洲高清视频 | 本站只有精品 | 亚洲国产精品久久久久久久久 | 黄色大片网站在线观看 | 99精彩视频在线观看 | 一级一级一级一级毛片 | 国产乱色精品成人免费视频 | av之家在线观看 | 精品在线观看一区 | 成人毛片免费 | 爱视频福利 | 最新在线黄色网址 | 欧美 日韩 亚洲 中文 | 欧美性生话视频 | 伊人午夜| 国产一区二区三区黄 | 亚洲免费看片网站 | 亚洲精品aaaaa | 亚洲成人第一区 | 操碰在线视频 | 蜜桃欧美性大片免费视频 | av手机免费在线观看 | 欧美人的天堂一区二区三区 | 黄色大片免费网站 | 精品无吗乱吗av国产爱色 | 亚洲人成网站在e线播放 |