tinkphp3.2数据库操作一(函数部分)
来源:互联网 发布:统计图用什么软件 编辑:程序博客网 时间:2024/05/17 07:16
其实写这篇文章文档API上讲的更详细,但是太分散,所以我把它集中起来,以备后用。
初始化配置
//'配置项'=>'配置值''DB_TYPE'=>'mysql', //新版本必须加上这个'DB_HOST' => '127.0.0.1','DB_USER' => 'root','DB_PWD' => '123','DB_NAME' => 'weibo', 'DB_PREFIX' =>'wei_', //表前缀
一、实例化
D(tablename/modelname);M(tablename);
简单说使用M 方法的话,是不需要定义对应的模型类的(即使有
定义也不会读取),通常这样的模型仅能调用一些系统基础模型类
Model类里面的一些方法。
使用D方法实例化模型的话,必须有对应的模型类文件,可以调用
一些模型自定义的方法或者属性,另外在Mode对应文件里面有自动
验证或者函数之类的业务逻辑也必需用D。
$db = D('tablename/modelname'); //modelname一定要存在$db = M('tablename');
二、创建数据:
$data = array( field1,value1, field2,value2, ...);
两种数据创建方式
1. create方法
如果不传递data参数,默认提取post数据(注意post字段名与数据库一致)$db->create($data);
数据的过滤:
①字段过滤
如果要只要提交部分字段,则可以在提交之前添加field过滤$db->field('name,email')->create();//只会提交属性为name和email部分的数据
②函数过滤
$db->field('name,email')->create()->filter('strip_tags');//filter是数据处理的函数
2. data方法
设置数据,但不会去匹配字段名 也不会过滤字段,如果为空,不会默认提交post数据 ,直接返回空
$db->data($data);
当然,我们可以在设置插入或更新的时候设置字段也可以
使用下面的方法
namespace Home\Model;use Think\Model;class UserModel extends Model{ protected $insertFields = 'name,email'; // 新增数据的时候允许写入name和email字段 protected $updateFields = 'email'; // 编辑数据的时候只允许写入email字段}
三、数据的写入
1. add方法
//如果之前调用过create或data方法 ,则不需要传递$data参数//第二个参数是条件子句,一般在前面用where函数过滤 不需要传递//第三个参数是 是否覆盖原有数据add($data='',$options=array(),$replace=false);
2.addAll方法
addA($dataList,$options=array(),$replace=false)//跟add方法差不多,但是一次插入多条数据 是个二维数组
四、数据读取
1、对应sql语句的函数操作
①alias 用于给当前数据表定义别名 字符串
SELECT * FROM think_user a INNER JOIN think_dept b ON b.user_id= a.id$Model = M('User');$Model->alias('a')->join('__DEPT__ b ON b.user_id= a.id')->select();
②group 用于对查询的group支持 字符串
SELECT username,max(score) FROM think_score GROUP BY user_id,test_time$this->field('username,max(score)')->group('user_id,test_time')->select();
③having 用于对查询的having支持 字符串
SELECT username,max(score) FROM think_score GROUP BY user_id HAVING count(test_time)>3$this->field('username,max(score)')->group('user_id')->having('count(test_time)>3')->select();
④join 用于对查询的join支持 字符串和数组(可用多次连接)
INNER JOIN: 如果表中有至少一个匹配,则返回行,等同于 JOIN
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
select * from think_artist right join think_workon think_artist.id = think_work.artist_id$Model = M('Artist');//__WORK__和 __CARD__在最终解析的时候会转换为 think_work和 think_card$Model->join('RIGHT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id')->select();//或者使用:$Model->join('__WORK__ ON __artist__.id = __WORK__.artist_id','RIGHT')->select();//join方法的第二个参数支持的类型包括:INNER LEFT RIGHT FULL。
⑤union 用于对查询的union支持 字符串、数组和对象
UNION 操作符用于合并两个或多个 SELECT 语句的结果集union 重复时不会记录进来
union all 重复时也会记录
select name from think_user_0unionselect name from think_user_1unionselect name from think_user_2$Model->field('name') ->table('think_user_0') ->union(array('field'=>'name','table'=>'think_user_1')) ->union(array('field'=>'name','table'=>'think_user_2')) ->select();
⑥distinct 用于查询的distinct支持 布尔值
SELECT DISTINCT name FROM think_user$Model->distinct(true)->field('name')->select();
⑦order 用于对结果排序 字符串和数组
select * from userinfo where status=1order by id desc,status asclimit 5$Model = M('userinfo');$Model->where('status=1') ->order('id desc,status') //id desc ,status asc ->limit(5)->select();
2. 函数操作的一般链式顺序(推荐,由于组合sql随意,
所以只要保证查询函数之前调用就可以了)->table()->alias()->distinct()
->field()->filter()->join()
->where()->union()->group()
->having()->order()->limit()/->page()
->field()->filter()->join()
->where()->union()->group()
->having()->order()->limit()/->page()
最后就是add/save/find/select
3. 数据读取的方法
①find方法 (返回一维数组)
find($options=array()) //查询所有符合条件的记录的第一条记录
②select方法 (返回二维数组)
select($options=array()) //查询所有符合条件的记录
③getField 读取某个列的多个或者单个数据
getField($field,$sepa=null)//$field字段名,可以是多个$list = $User->getField('id,nickname');
4. 数据直接查询
query($sql,$parse=false) //查询execute($sql,$parse=false) //执行
5. 记录统计
$total = count($res);
五、数据的更改
1.save方法
save($data='',$options=array())//同add一样,如果在save之前调用过data或create方法//那么$data方法不用传递//如果$data中包含主键,那么where可以忽略//否则如果忽略where的话,将不会更新任何数据
2. setField方法
setField($field,$value='')//第一个参数可以是数组$data//该函数会自动调用上面的save方法
3.setInc和setDec方法。
setInc($field,$step=1) //字段自增$stepsetDec($field,$step=1) //字段自减$step
六、数据的删除
delete方法
delete($options=array())//如果指定删除id,可以传入参数$User->delete('1,2,5'); // 删除主键为1,2和5的用户数据//不传入参数我们可以通过where函数判断
六、调试
数据库调试函数:1. 打印最后一条sql语句
M("member")->getLastSql();
2. 显示所有的sql语句
添加配置项'SHOW_PAGE_TRACE'=>true,//配置项 $db->show(''); //调用函数
1 0
- tinkphp3.2数据库操作一(函数部分)
- POSTGRESQL 数据库 函数 操作符 一
- 数据库部分操作
- android 数据库部分操作
- Java数据库操作部分
- 部分文件操作函数
- 数据库基础知识点一:Oracle入门,数据库基本操作,函数
- 数据库的部分成操作
- mysql数据库操作部分汇总
- PHP4与MySQL数据库操作函数详解(一)
- 一个数据库操作类的实例(一.Command类部分)
- c++函数部分(一)
- Oracle学习笔记20150823java程操作数据库与部分常见函数的使用
- 数据操作中涉及到统计的部分主要借助数据库内置函数完成
- 数据库的操作(一)
- android-数据库操作一
- Acesss数据库操作一
- Android数据库操作<一>
- UIImageView, 添加动画,滑动条Slider控件,用户交互
- C++的第一个程序:Hello World
- 飞思卡尔i.MX 6Quad Android 4.2.2的中兴和Ublox 3G驱动移植
- javascript数组操作篇:《随机获取N项》
- POJ 1769 Minimizing maximizer
- tinkphp3.2数据库操作一(函数部分)
- C#导出List数据到xml文件[附源码]
- OpenMP与C++:事半功倍地获得多线程的好处
- POJ2349--Arctic Network
- iostat来对linux硬盘IO性能进行了解
- 行人检测评估表的理解
- Html表格到一定宽度无法自适应
- CGAffineTransform
- wamp出现You don’t have permission to access/on this server提示