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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

curd日志记录php,ThinkPHP学习之CURD操作(一)

發(fā)布時(shí)間:2025/3/17 php 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 curd日志记录php,ThinkPHP学习之CURD操作(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫在前面

這周開始學(xué)習(xí)ThinkPHP,將學(xué)習(xí)的日記記錄下來。不僅僅學(xué)習(xí)怎么用TP,也要從源碼上來學(xué)習(xí)TP框架。

日記每天都寫,但不一定都放到網(wǎng)上。希望自己能夠堅(jiān)持下去。

閑話少說,既然是閱讀源碼,關(guān)于TP的建立,配置等一系列操作就不去說了,官方文檔有佷詳細(xì)的介紹。

要同學(xué)想要學(xué)習(xí)TP的可以點(diǎn)擊 ThinkPHP3.2.3快速入門 學(xué)習(xí),大家一起進(jìn)步。

CURD操作

什么是CURD操作?

實(shí)際上是對數(shù)據(jù)庫增刪改查的簡稱。

包括了create、update、read、delete四個(gè)基本操作。

在TP中對CURD操作的實(shí)現(xiàn)是add,save,select,update。

打開Think/Library/Model.class.php,可以在其中找到這四個(gè)操作。

接下來就開始來查看源碼,知道運(yùn)行的流程,才能夠更好的運(yùn)用這四個(gè)操作。

CUED操作之a(chǎn)dd方法

add方法用于數(shù)據(jù)添加,是TP對create操作的實(shí)現(xiàn)。

注意一點(diǎn)的是,TPModel中也有create方法,但并不是CURD操作的一種,而是對即將插入數(shù)據(jù)庫的數(shù)據(jù)的處理方法。

參數(shù)分析

add方法有三個(gè)參數(shù)(不必須傳遞),如下

$data 默認(rèn)值'' 需要進(jìn)行插入數(shù)據(jù)庫的數(shù)據(jù)

$option 默認(rèn)值array() 表達(dá)式參數(shù) 其中存儲著 所有進(jìn)行過的連貫操作

$replace 默認(rèn)值false 是否在插入數(shù)據(jù)庫時(shí)進(jìn)行replace操作

返回值可能是bool(false)或數(shù)據(jù)庫受影響的行數(shù)或主鍵值。

從返回值看出該操作是必須位于連貫操作的末尾,可以看成一連套組合技中的終結(jié)技。

流程分析

我對add方法的執(zhí)行流程分成了四步

首先,檢測數(shù)據(jù)是否為空

其次,進(jìn)行數(shù)據(jù)處理與表達(dá)式分析

以上都通過 進(jìn)行數(shù)據(jù)插入 返回插入結(jié)果

對返回的結(jié)果進(jìn)行分析

步驟一

假設(shè)進(jìn)行用戶注冊操作,插入數(shù)據(jù)表User,使用add方法進(jìn)行操作。

user字段為:

主鍵 user_id

昵稱 user_name

密碼 password

郵箱 email

前臺POST數(shù)據(jù):

array(

'user_name' => 'xiamsahfw',

'password' => 'adhe99211' ,

'confrim' => 'adhe99211' ,

'email' => '221131@qq.com',

'hid' => 'register'

);

復(fù)制代碼

在UserController類中的操作:

$data = I('post.');

$User = M('User');

$User->create($data);

$User->add();

復(fù)制代碼

在add操作中,并沒有給add傳遞任何參數(shù),但在$User->create($data)中傳遞了該值,在該操作中就會(huì)自動(dòng)將數(shù)據(jù)添加到Model中的$this->data中,而add會(huì)自動(dòng)引用該值。

同時(shí)create方法會(huì)將自動(dòng)將傳遞的參數(shù)與數(shù)據(jù)表的字段進(jìn)行對比,將不屬于表中的字段刪除。

步驟二

之后,add方法就會(huì)調(diào)用_facade方法對$data進(jìn)行數(shù)據(jù)處理,其實(shí)在這里是二次處理$data數(shù)據(jù),因?yàn)樵赾reate方法以及對數(shù)據(jù)進(jìn)行過處理。如果在UserController中并沒有調(diào)用create方法,而是直接傳遞$data到add方法,那么_facade就會(huì)把'confrim' => 'adhe99211' ,'hid' => 'register'刪除,變成:

array(

'user_name' => 'xiamsahfw',

'password' => 'adhe99211' ,

'email' => '221131@qq.com'

);

復(fù)制代碼

為了可能的連貫操作,add會(huì)調(diào)用_parseOptions進(jìn)行表達(dá)式分析。

在表達(dá)式分析后即使沒進(jìn)行任何連貫操作,在返回的值也存在兩個(gè)元素:

Array (

[table] => user

[model] => User

)

復(fù)制代碼

table表示操作的數(shù)據(jù)表,model表示操作的模型名。

如果之前存在連貫操作,如where,group by等也會(huì)在該項(xiàng)顯示。此外,傳遞連貫操作到add方法,也會(huì)和已經(jīng)存在的操作進(jìn)行合并。

步驟三

以上其實(shí)都是數(shù)據(jù)插入的準(zhǔn)備工作,準(zhǔn)備工作完成就能夠進(jìn)行數(shù)據(jù)插入了。當(dāng)然數(shù)據(jù)插入不屬于Model的功能,在TP中需要調(diào)用Think\Driver.class.php中的insert方法。

insert方法接受三個(gè)參數(shù)

$data

$option

$replace

前兩個(gè)參數(shù)是處理過的數(shù)據(jù)以及組合后的連貫操作表達(dá)式,第三個(gè)參數(shù)表示在插入數(shù)據(jù)庫時(shí),是否進(jìn)行replace操作,默認(rèn)為false。在這個(gè)方法中會(huì)將傳遞的數(shù)據(jù)與連貫操作表達(dá)式進(jìn)行組合,形成正式的sql語句,并執(zhí)行sql語句。最后返回執(zhí)行結(jié)果。

步驟四

雖然得到了返回結(jié)果,add并不是直接將結(jié)果返回,而是返回分析后的結(jié)論。insert返回的結(jié)果,可能有:

失敗 => false

成功 => 返回受影響的行數(shù)

但是實(shí)際進(jìn)行中,我們可能會(huì)不僅想要得到一個(gè)插入成功的結(jié)論,而是想要得到插入后的主鍵值。在add方法中會(huì)對返回結(jié)果進(jìn)行判斷,從而返回受影響的行數(shù)(多條數(shù)據(jù)插入)或主鍵值(一條數(shù)據(jù))或false。

題外話:

在進(jìn)行數(shù)據(jù)插入之前我注意到有這么一行代碼。

if(false === $this->_before_insert($data,$options)) {

return false;

}

復(fù)制代碼

這里TP沒有做任何注釋,尋找之后,發(fā)現(xiàn)是一個(gè)空方法,解釋為 插入數(shù)據(jù)前的回調(diào)方法

// 插入數(shù)據(jù)前的回調(diào)方法

protected function _before_insert(&$data,$options) {}

復(fù)制代碼

將這個(gè)方法打印出來,結(jié)果為NULL

var_dump($this->_before_insert($data,$options)); // NULL

復(fù)制代碼

百度一下也沒找到想要的答案,我對TP的官方文檔并沒有看完,可能官方會(huì)有用法的介紹。

這里很糾結(jié),我猜測是在子類繼承時(shí),可以實(shí)現(xiàn)這個(gè)方法進(jìn)行某些特殊操作(很大可能)。與之相同的還有_after_insert方法。

總結(jié)

寫了一大串,也不知道寫的是不是很清晰,但是我的確是對這個(gè)方法熟悉了很多。這個(gè)方法雖然可以不傳遞參數(shù),但如果之前沒進(jìn)行create還是會(huì)出錯(cuò)的,雖然內(nèi)部集成了數(shù)據(jù)處理,但不是很完善,比如對數(shù)據(jù)沒能進(jìn)行轉(zhuǎn)義,也不能夠?qū)?shù)據(jù)字段進(jìn)行驗(yàn)證,需要我們自己進(jìn)行調(diào)用其它方法等等。知道了add的運(yùn)行原理,自然能夠很好的運(yùn)用它,同時(shí)對自己封裝模型類時(shí)也有了很大啟發(fā)。

今天就寫到這兒,下一篇準(zhǔn)備寫CURD中的read,也就是TP中的select。

博主大三狗,正在努力學(xué)習(xí)中,文中有錯(cuò)漏之處難免,歡迎指正,歡迎批評。

總結(jié)

以上是生活随笔為你收集整理的curd日志记录php,ThinkPHP学习之CURD操作(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 性生交大片免费看3p | 中文字幕一二三四 | 久久久老司机 | 黑色丝袜吻戏亲胸摸腿 | 国产理论视频 | 国产成人在线免费视频 | 中文字幕av一区二区三区人妻少妇 | 在线亚洲区 | 欧美日韩黄色 | av免费在线观看网址 | 久久视频在线播放 | 国产二级片| 已满18岁免费观看电视连续剧 | 亚洲黄站| 欧美色图五月天 | 美女在线一区 | 最新国产中文字幕 | 97免费超碰 | 中文字幕人成乱码熟女香港 | 特级西西www444人体聚色 | 妞干网av| 日韩av在线电影 | 污污污污污污www网站免费 | 日韩免费在线观看 | 欧美啪啪一区二区 | 91婷婷色| 久久免费看| 久久久久99精品成人片直播 | 蜜芽在线视频 | 天天躁日日躁狠狠躁av麻豆男男 | 国产精选中文字幕 | 婷婷激情视频 | 北条麻妃在线一区 | 亚洲欧美视频在线 | 一区二区三区激情 | www啪啪 | av色资源 | 国产精品av在线免费观看 | xxxx久久| 来吧亚洲综合网 | 少女情窦初开的第4集在线观看 | 91精品国产高清一区二区三蜜臀 | 日韩毛片在线看 | 在线黄av | 黄色小视频在线免费观看 | 久久av不卡| 欧美日韩国产一区二区 | 黄视频免费看在线 | 麻豆一区二区三区精品视频 | 日日碰狠狠添天天爽 | 国产精品成人3p一区二区三区 | 欧美男女性生活视频 | 亚洲第一天堂久久 | 中国精品毛片 | 久久久久久成人精品 | 亚洲 国产 欧美 日韩 | 插插看看| 成人免费看片在线观看 | 调教少妇视频 | 久草毛片 | 超碰在线免费观看97 | 欧美极品一区二区 | 欧美综合激情网 | www.国产视频.com | 久久精品97 | 日韩亚洲国产精品 | 欧美色图亚洲视频 | 欧美性猛交xxxx乱大交蜜桃 | 色片免费观看 | 日本中文字幕高清 | 黄色不雅视频 | 日本第一页 | av自拍| 91精品国产综合久久精品 | 影音先锋中文字幕第一页 | 男人的天堂av网 | 色婷婷视频网 | 熟妇人妻一区二区三区四区 | 国产精品91视频 | 国产精品一品二区三区的使用体验 | 成年人视频网站 | 国产黄a三级三级三级看三级男男 | 国产免费观看视频 | 2022天天操 | 日韩在线一区视频 | 欧美精品激情 | 亚洲精华液一区二区 | 视频三区在线 | 亚洲精品欧美精品 | 日韩色视频在线观看 | 欧美www.| 久草热在线观看 | 爽爽视频在线观看 | 成人黄色激情视频 | 国产精品呻吟久久 | 同人动漫在线观看 | 日韩白浆| 蜜桃成人在线视频 | 无码人妻av免费一区二区三区 |