PHP封装curd,CURD · TookPHP开发手册 · 看云
## CURD
* 開啟 DEBUG 模式后,所有SQL語句均會在調試窗口顯示,一目了然.
[TOC]
### find 單條查詢
通過 find 操作進行簡單的單條查詢操作。
~~~
//查找主鍵值為 18 的記錄
$db->find(18);
~~~
### all 查詢(別名 select)
通過 all 查找所有記錄數 。
~~~
//查找表中所有記錄
$list = M('news')->all();
~~~
### table 臨時改變表
通過 table() 方法可快速切換操作表
~~~
//改變操作表為 user
M('news')->table('user')->all();
~~~
### join 表關聯
使用 join() 可以快速實現表間關聯
~~~
//關聯 user 表與 role 表
$data =M('user')->alias('u')->field('u.*')->join('__role__ r ON u.rid=r.rid')->all();
//生成的查詢語句: select u.* from tb_user inner join tb_role r ON u.rid = r.rid;
~~~
### max 查找最大的值
查找年齡最大的用戶
M('user')->max('age');
### min 查找最小的值
~~~
//查找最便宜的商品
M('goods')->min('price');
~~~
### avg 求平均值
~~~
//查找商品平均價格
M('user')->avg('price');
~~~
### sum 求和
~~~
//獲得點擊數之和
M('news')->sum('click')
~~~
### count 統計操作
~~~
//統計會員總數
M('user')->count()
~~~
### field 字段集
~~~
//返回字段為 uid 與 username
$db->field('uid,username')->select();
//以數組形式傳參
$db->field(array('uid','username'))->select();
//更靈活的傳參
$db->field(array('uid','concat(username,"-",uid)'=>'userid','LEFT(username,7)'=>'name'))- >select();
//上面生成SQL: SELECT uid,concat(username,"-",uid) AS userid,LEFT(username,7) AS name FROM tb_user
~~~
### 字段排除
~~~
//獲得除 content,title 以外的所有字段
M('news')->field(array('title','content'),true)->all();
~~~
### limit 取部分數據
limit 方法就是為了生成 SQL 的 limit 部分
~~~
//查找第 2 條記錄開始的 5 條記錄
$db->limit('2,5')->all();
~~~
### order 排序
按 id 從大到小排序
$db->order('id desc')->all();
### getField 獲得指定字段值
按字段名獲得結果的方法
~~~
//獲取唯一字段值值
//無論結果有多少個只返回一個值
$db->where('id=32')->getField('title');
~~~
~~~
//滿足條件記錄的所有 title 字段
$db->where('id>2')->getField('title',true);
~~~
~~~
//兩個字段列表
//兩個字段時返回一維數組,第一個字段做為鍵名使用,第 2 個字段做為鍵值
$db->getField('id,title');
~~~
~~~
//多個字段時
//多個字段返回二維數組,第一個字段值做為鍵名使用,其余字段做為鍵值
$db->getField('id,title,click');
~~~
### group 分組操作
TookPHP框架提供了完善的分組操作方法,自由指定分組參數使發送 SQL 更容易
~~~
//按 id 與 name 分組查詢
$list =$db->group('id,name')->all();
//生成SQL: SELECT `id`,`name`,`sendtime` FROM tb_demo GROUP BY id,name
~~~
### having 分組條件
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用 , 所以
使用 HAVING 對分組進行條件篩選 , 所以在使用 HAVING 時應該使用 group 分組。
~~~
//獲得記錄條數大于 2 的 cid 值
M('news')->having('count(*) >2')->group('cid')->select();
~~~
### add 添加數據(別名 insert)
特點 :
自動過濾非法字段
自動對插入數據進行安全處理
沒有傳入參數時使用 $_POST 值
返回值為新增主鍵值或 true
~~~
//實例
$data=array('uname'=>'admin','url'=>'http://www.baidu.com');
$lastId = $db->add($data);
~~~
### ORM 屬性映射
~~~
$db->username = '李四';
$db->web = 'baidu.com';
$db->add();
~~~
### replace 添加數據
~~~
//數據中存在主鍵則更新否則添加數據。
$data =array('id'=>1,'name'=>'admin');
M('news')->replace($data);
~~~
### save 更新(別名 update)
**特點**
a. 自動過濾掉非法字段
b. 自動進行數據安全處理
c. 默認以 $_POST 數據更新
d. 必須有更新條件 , 防止誤更新
e. 如果參數中存在主鍵值將以這個值為條件進行更新數據
~~~
//uid 為表主鍵,使用數據中的主鍵為條件進行更新
$data=array('uid'=>9,'username'=>' 郭富城 ');
$db->save($data);
~~~
### setField 更新字段
如果只是更新個別字段的值,可以使用setField方法。
~~~
//更改用戶的name值
M("user")->where('id=5')->setField('name','TookPHP');
//生成SQL: update tb_user set name='TookPHP' where id=5
~~~
setField方法支持同時更新多個字段,只需要傳入數組即可,例如:
~~~
//更改用戶的name和email的值
$data = array('name'=>'TookPHP','email'=>'test@163.com');
M("user")->where('id=5')->setField($data);
~~~
### inc 增加值
注:
* 帶三個參數:inc($field, $where, $step)
* 帶兩個參數:inc($field, $step)
* 只帶一個參數:inc($field)
* $step 缺省值 1
~~~
//將 id 為 4 記錄的 total 加 1 ()
M('news')->inc('total','id=4',1);
//生成SQL: update tb_news set total=total+1 where id=4
//將 id 為 4 記錄的 total 加 1
M('news')->where('id=4')->inc('total');
//生成SQL: update tb_news set total=total+1 where id=4
//將 id 為 4 記錄的 total 加 100
M('news')->where('id=4')->inc('total',100);
//生成SQL: update tb_news set total=total+100 where id=4
~~~
### dec 減少值
用法同上 inc方法,唯一區別在于 inc用于增加值,dec用于減少值
~~~
//將 id 為 4 記錄的 total 減 1
M('news')->dec('total','id=4',1);
//生成SQL: update tb_news set total=total-1 where id=4
//將 id 為 4 記錄的 total 減 100
M('news')->where('id=4')->dec('total',100);
//生成SQL: update tb_news set total=total-100 where id=4
~~~
### del 刪除(別名 delete)
為了屏蔽誤刪除 del 方法必須指定條件
~~~
//刪除主鍵值為 58 的數據
M('news')->del(58);
//生成SQL: DELETE FROM tb_news WHERE id in(58)
~~~
### fieldExists 檢測表字段是否存在
~~~
//檢測 news 表是否存在 title 字段
$db->fieldExists('title','news');
~~~
### tableExists 檢測表是否存在
`M()->tableExists('category');`
### getVersion 獲得數據庫版本信息
`$db->getVersion();`
### getLastSql 獲得最后一條 SQL
$db->getLastSql();
### getAllSql 獲得所有 SQL 語句
`$db->getAllSql();`
### getAffectedRows 獲得受影響的行數
`$db->getAffectedRows();`
### getInsertId 獲得最后插入的主鍵值
~~~
$data=array('title'=>'標題');
$db->insert($data);
$db->getInsertId();
~~~
### getAllTableInfo 獲所有表信息
獲得當前數據庫的所有表信息 , 數據大小包括碎片、數據、索引
`M()->getAllTableInfo();`
### getDataBaseSize 獲得數據庫大小
獲得當前數據庫大小即所有表碎片、數據、索引之和
`M()->getDataBaseSize();`
### getTableSize 獲取表大小
~~~
//獲得 news 表大小 , 包含表碎片、數據、索引之和
M()->getTableSize('news');
~~~
### createDatabase 創建數據庫
~~~
//以 gbk 編碼創建數據庫 testdb
M()->createDatabase('testdb','gbk');
~~~
### truncate 清空表
~~~
//清空表 news 表并將自增數歸零
M()->truncate(news);
~~~
### repair 修復表
`M()->repair('user');`
### optimize 優化表
`M()->optimize('user');`
### rename 修改表名
~~~
//將 user 表更名為 tk_user 表
M()->rename('user','tk_user');
~~~
### dropTable 刪除表
`$db->dropTable('user');`
### beginTrans 開啟事務
~~~
//完成事務處理需要選擇表引擎如 InnoDB、NDB、BDB
$data=array('wages'=>100);
$db->beginTrans();// 開啟事務
$db->add($data);// 添加數據
$db->commit(); // 提交事務
~~~
### rollback 事務回滾
~~~
//當事務完整性被破壞或者其他原因可以通過 rollback 方法放棄本次事務操作
$db->rollback();
~~~
### 提交事務 commit()
~~~
//如果整個事務完成正確可以通過 commit() 進行事務的提交完成最終操作
$data=array('wages'=>100);
$db->beginTrans();// 開啟事務
$db->add($data);// 添加數據
$db->commit();// 提交本次事務
~~~
總結
以上是生活随笔為你收集整理的PHP封装curd,CURD · TookPHP开发手册 · 看云的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 5785 Interesting
- 下一篇: c++--运算符重载