国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁(yè) > 編程 > PHP > 正文

thinkphp3.2.0 setInc方法 源碼全面解析php實(shí)例

2020-03-22 20:30:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
下面小編就為大家分享一篇thinkphp3.2.0 setInc方法 源碼全面解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

我們先來(lái)看一下setInc的官方示例:

需要一個(gè)字段和一個(gè)自增的值(默認(rèn)為1)

我們通過(guò)下面這個(gè)例子來(lái)一步步分析他的底層是怎么實(shí)現(xiàn)的:

 ?phpnamespace Home/Controller;use Think/Controller;html' target='_blank'>class TestController extends Controller { public function test() { $tb_test = M( test  $tb_test- where([ id = 1])- setInc( test_number ,2); //每次添加2 dump($tb_test- getLastSql()); //string(67) UPDATE `tb_test` SET `test_number`=test_number+2 WHERE ( `id` = 1 ) }

第一步肯定是要找到setInc方法的源碼:

這里我用到了phpstrom全局搜索的方法,找到了setInc是在proj/ThinkPHP/Library/Think/Model.class.php下

/** * 字段值增長(zhǎng) * @access public * @param string $field 字段名 * @param integer $step 增長(zhǎng)值 * @return boolean public function setInc($field,$step=1) { return $this- setField($field,array( exp ,$field. + .$step)); }

可以看到這里用到了setField這個(gè)方法,然后用exp自定義表達(dá)式設(shè)置 $field = $field + $step 到這里,我們稍微了解了一點(diǎn)原理。

可是問(wèn)題又來(lái)了setField又是怎么實(shí)現(xiàn)的呢?在同個(gè)文件下,找到setField方法:

/** * 設(shè)置記錄的某個(gè)字段值 * 支持使用數(shù)據(jù)庫(kù)字段和方法 * @access public * @param string|array $field 字段名 * @param string $value 字段值 * @return boolean public function setField($field,$value= ) { if(is_array($field)) { $data = $field; }else{ $data[$field] = $value; return $this- save($data); }

這里我們看到了常用到的save方法,這里的 $data[$field] = $value; 其實(shí)就是 $data[ test_number ] = array( exp , test_number+2 )

接著來(lái)看最常用的save方法:

/** * 保存數(shù)據(jù) * @access public * @param mixed $data 數(shù)據(jù) * @param array $options 表達(dá)式 * @return boolean public function save($data= ,$options=array()) { if(empty($data)) { // 沒(méi)有傳遞數(shù)據(jù),獲取當(dāng)前數(shù)據(jù)對(duì)象的值 if(!empty($this- data)) { $data = $this- data; // 重置數(shù)據(jù) $this- data = array(); }else{ $this- error = L( _DATA_TYPE_INVALID_  return false; // 數(shù)據(jù)處理 $data = $this- _facade($data); // 分析表達(dá)式 $options = $this- _parseOptions($options); $pk = $this- getPk(); if(!isset($options[ where ]) ) { // 如果存在主鍵數(shù)據(jù) 則自動(dòng)作為更新條件 if(isset($data[$pk])) { $where[$pk] = $data[$pk]; $options[ where ] = $where; unset($data[$pk]); }else{ // 如果沒(méi)有任何更新條件則不執(zhí)行 $this- error = L( _OPERATION_WRONG_  return false; if(is_array($options[ where ]) isset($options[ where ][$pk])){ $pkValue = $options[ where ][$pk]; if(false === $this- _before_update($data,$options)) { return false; $result = $this- db- update($data,$options); if(false !== $result) { if(isset($pkValue)) $data[$pk] = $pkValue; $this- _after_update($data,$options); return $result; }

最主要是的$options = $this- _parseOptions($options);和$result = $this- db- update($data,$options); 前者把參數(shù)轉(zhuǎn)換成用于拼接sql的字符串數(shù)組,后者調(diào)用了proj/tptest/ThinkPHP/Library/Think/Db.class.php下的update方法:

/** * 更新記錄 * @access public * @param mixed $data 數(shù)據(jù) * @param array $options 表達(dá)式 * @return false | integer public function update($data,$options) { $this- model = $options[ model  $sql = UPDATE  .$this- parseTable($options[ table ]) .$this- parseSet($data) .$this- parseWhere(!empty($options[ where ])?$options[ where ]: ) .$this- parseOrder(!empty($options[ order ])?$options[ order ]: ) .$this- parseLimit(!empty($options[ limit ])?$options[ limit ]: ) .$this- parseLock(isset($options[ lock ])?$options[ lock ]:false) .$this- parseComment(!empty($options[ comment ])?$options[ comment ]:  return $this- execute($sql,$this- parseBind(!empty($options[ bind ])?$options[ bind ]:array())); }

最后其實(shí)就是用到了proj/ThinkPHP/Library/Think/Db/Driver/Mysql.class.php這個(gè)驅(qū)動(dòng)類的execute方法。

/** * 執(zhí)行語(yǔ)句 * @access public * @param string $str sql指令 * @return integer|false public function execute($str) { $this- initConnect(true); if ( !$this- _linkID ) return false; $this- queryStr = $str; //釋放前次的查詢結(jié)果 if ( $this- queryID ) { $this- free(); } N( db_write ,1); // 記錄開(kāi)始執(zhí)行時(shí)間 G( queryStartTime  $result = mysql_query($str, $this- _linkID) ; $this- debug(); if ( false === $result) { $this- error(); return false; } else { $this- numRows = mysql_affected_rows($this- _linkID); $this- lastInsID = mysql_insert_id($this- _linkID); return $this- numRows; }

最后用最底層的mysql_query執(zhí)行SQL語(yǔ)句。

到此為止,setInc的源碼已經(jīng)大致過(guò)了一遍了。想必大家對(duì)setInc如何執(zhí)行也更了解了一點(diǎn)。

以上這篇thinkphp3.2.0 setInc方法 源碼全面解析就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持php 。

相關(guān)推薦:

PHP 使用二進(jìn)制保存用戶狀態(tài)的實(shí)例php技巧

PHP+Redis 消息隊(duì)列 實(shí)現(xiàn)高并發(fā)下注冊(cè)人數(shù)統(tǒng)計(jì)的實(shí)例php實(shí)例

laravel ORM 只開(kāi)啟created_at的幾種方法總結(jié)php實(shí)例

以上就是thinkphp3.2.0 setInc方法 源碼全面解析php實(shí)例的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
最好2018中文免费视频| 国产精美视频| 激情四房婷婷| 免费a在线看| 丁香视频五月| 国产视频二区| 在线观看wwww| 免费黄网站在线观看| 成人精品福利| 中文字幕在线影院| 在线āv视频| 超碰在线观看免费版| 国产一区精品| 亚洲精品视频区| 黄色免费av| 亚洲欧美小说国产图片| 青草视频在线播放| 国产人成高清视频观看| 在线观看的av| 国产视频xxxx| 九色成人在线| 秋霞av在线| av超碰在线| 国产免费专区| 精品国产一区二区三区不卡在线| a级片国产精品自在拍在线播放| 国产网站免费观看| 久久久久久久久久久久网站| 精品卡1卡2卡三卡免费网站| 国产日本韩国在线播放| 国内自拍视频在线观看| 欧美日韩亚洲第一页| 在线视频观看亚洲| 国产粉嫩一区二区三区在线观看| 国产免费福利| 国产中文在线| 丁香婷婷在线观看| 超碰在线97国产| 欧美精品一区二区三区免费| 中文资源在线官网| 在线播放国产区| 在线a人片免费观看视频| 国产馆av播放| 91涩漫在线观看c| 99综合精品久久| 香蕉视频在线看| 亚洲精品aaaa| 久久久久久77777| 尤物视频在线观看| 91超碰在线免费| 国产羞羞视频在线观看| 日本最新在线视频| 国产调教视频在线观看| 69堂视频在线观看国产| 在线国产小视频| 精品偷拍激情视频在线观看| 国产www.大片在线| 在线色视频网| 九九热在线观看| 国产高清视频免费最新在线| 在线午夜视频| sese一区| 国产小视频在线观看| 97影院秋霞午夜在线观看| 一区二区免费播放| 蜜桃av在线免费观看| 国产一区二区影视| 亚洲电影视频在线| 国产久草在线| www亚洲天堂| 男人天堂网在线观看| 国产麻豆综合视频在线观看| 国产传媒在线播放| 国产免费一级| 精品久久亚洲一级α| а√最新版在线天堂| 国产精品乱码一区二区三区视频| 亚洲成人av高清| 国产一级黄色电影| heisi视频网在线观看| 1区2区视频| 秋霞av在线| 在线观看免费高清完整| 午夜免费视频在线国产| 亚洲私人影吧| 国产小黄视频| 二区三区中文字幕| 四虎成人欧美精品在永久在线| 国产一级黄色片免费| 久久精品免视着国产成人| 在线视频99| 精品福利视频导航大全| 国产一级片网站| 国产自产视频| 九九色在线观看| www在线视频观看| 亚洲欧美日韩成人网| 国产精品福利视频一区二区三区| 蜜桃视频中文字幕| 欧美成人亚洲高清在线观看| 国产精品被窝福利一区| 国产福利免费观看| 国产福利微拍精品一区二区| 国产精品国精产品一二| 国产精品剧情一区二区三区| 国产高清在线a视频大全| 2019年中文字幕| 在线播放国产区| 欧美性猛交xxxx免费看蜜桃| 超碰在线网址| 国产精选在线观看| 国产人成在线观看| av黄色在线观看| sese一区| 国产一级又黄| 精品国内自产拍在线视频| 中文乱码字幕av网站| 亚洲精品视频区| 久草.com| 国产高清在线观看| www久久日com| 99视频资源网| 亚洲色婷婷综合开心网| 欧美人成在线观看网站高清| 丁香在线视频| 中文字幕4区| 国产毛片毛片| 在线视频观看亚洲| 久久99精品久久久久久野外| 国产性色视频| 午夜在线视频播放| 国产一级黄色| 日韩在线天堂| 国产国语**毛片高清视频 | 在线观看视频污| 国自产拍在线网站网址视频| 国产高清在线a视频大全| 波多野结衣中文字幕久久| 最近中文字幕av免费高清| 在线天堂中文| 国产三区在线观看| 免费国产阿v视频在线观看| 国产成人精品综合网站| 任你操视频在线观看| 国产一级二级在线| 日本福利在线| 日本一本久久| 一本久中文高清| 精品国产一区二区三区久久久狼牙| 好看的中文字幕在线播放| 在线免费观看高清视频色| 国产精品视频一区二区免费不卡| 超碰国产在线| 成av人免费青青久| 欧美婷婷久久五月精品三区| av亚洲在线| 日本欧美在线视频免费观看| 一级黄色av| 在线观看av网站永久| 国产精品欧美韩国日本久久| 中文字幕在线免费视频| 国产综合视频一区二区三区免费| 午夜在线视频| 免费看的毛片| 国产免费高清| 国产精品久久在线| 91在线中文| 亚洲wwwwww| 欧美日韩一区二区三区在线播放 | 一区二区免费播放| 91蜜桃在线视频| 亚洲综合在线不卡| 在线观看av的网站| 日p在线观看| 成年网站免费入口在线观看| 天天操夜夜操天天射| 国产二级片在线| 免费男女羞羞的视频网站中文字幕| 久草一本av| 91涩漫在线观看c| 热99在线观看| 国产日韩欧美精品一区二区三区| 制服丝袜中文字幕在线观看| 嫩草在线播放| 国产一区二区三区四区尤物| 精品无人乱码| 国产麻豆一级片| 国产高清免费在线播放| 日韩在线天堂| 国产成人午夜| 九色视频网站| 99热免费在线观看| 丁香花在线电影小说观看| 国产超碰97| 国产免费黄色| 青青久草在线| 在线视频中文字幕| 国产亚洲精品自在线观看| 亚洲第一成人在线视频| 午夜视频在线|