对数据库进行的操作无非有四种,增、删、改、查。其中,最常见也是最重要的就是对数据库的查询操作,由于thinkPHP是基于php下的一个框架,其对基本的查询操作进行了一定的封装,本文就是参考thinkPHP3.2的参考手册,对基本的查询操作进行了整理
thinkPHP中有关查询方法的简单介绍
首先介绍thinkPHP中查询的语法。
很容易理解,查询需要条件,在thinkPHP中,有关条件进行的操作封装在where( data)方法中,其中 data 为查询的条件。
从查询的结果来看,thinkPHP封装有三种具体的方法:select() //获取符合条件的所有数据 find() //获取符合条件的第一条数据 getField($data) //获取符合条件的数据的某一个字段
其次介绍thinkPHP中的连贯操作。
thinkPHP是基于MVC三层框架设计的,其工作机制就是针对于对象的操作,其对于数据的操作大多数时候是返回一个对象
如:$n = M('User');
便为实例化一个User表,返回一个对象 n,存储有这个表的所有的属性以及元素值对返回来的 n进行处理,得到一个数组
$m = $n -> where('') -> select();
理解了thinkPHP的工作机制,下面介绍常用的查询方法
一、普通的查询方式
使用where方法与select,find,getField方法搭配查询
where方法中传递字符串
$n = new Model(User);
$arr = $n -> where("id = 24 and username = '信息学院'") -> find();
where方法中传递数组
$n = new Model(User);
$data['id'] = ?;
$data['username'] = ?;
$arr = $n -> where($data) -> find();
注意:在此种查询方式中,默认按照与进行查询,可设置_logic属性进行修改
$data['_logic'] = 'or';//设置查询操作的逻辑关系,默认为and的关系
二、表达式的查询方式
利用数组进行的一系列操作
常见的不区分大小写(对大小写不敏感)的条件表达式
GT 大于 greater than
EQ 等于 equal
LT 小于 less than
EGT 大于等于
ELT 小于等于
NEQ 不等于 not equal
LIKE
NOTLIKE //必须没有空格
BETWEEN
NOT BETWEEN //必须有空格
IN
基于条件表达式的查询
此种方式下,通过数组来组装查询条件,类似于sql语句
非模糊查询举例
$n = new Model(User);
$data['id'] = array('GT',20);
$arr = $n -> where($data) -> select();
var_dump();
模糊查询举例
根据字段进行查询,%表示通配符,代表任意长度的字符串;_表示任意单个长度的字符。
like方式查询
进行单条件查询时
$n = new Model(User); $data['username'] = array('like',"%中%"); $arr = $n -> where($data) -> select(); var_dump($arr);
进行多条件查询时
$n =new Model(User); $data['username'] = array('like',array('%中%','%学%'));//或者的关系,为默认值 $data['username'] = array('like',array('%中%','%大%',%学%'),'and'); $arr = $n -> where($data) -> select(); var_dump($arr);
BETWEEN方式查询
between
$n = new Model(User); $data['id'] = array('between',array(1,20)); $arr = $n -> where($data)->select(); var_dump();
not between
$n = new Model(User); $data['id'] = array('not between',array(1,20)); $arr = $n -> where($data)->select(); var_dump();
IN方式查询
in方式
$n = new Model(User); $data['id'] = array('in',array(2,6,7)); $arr = $n -> where($data) -> select(); var_dump();
not in方式
$n = new Model(User); $data['id'] = array('not in',array(2,6,7)); $arr = $n -> where($data) -> select(); var_dump();
三、基于区间的查询方式
此中方式实际上是基于表达式查询方式的拓展,确认一个特定的有意义的区间
数组data中放置要查询的区间
$n = new Model(User); $data['id'] = array(array('egt',1),array('elt',20));//默认方式是并且的关系 $data['id'] = array(array('egt',1),array('elt',20),'or');//调整为或者的关系 $arr = $n -> where($data) -> select(); var_dump();
向条件中添加子数组
$data['username'] = array(array('like','%中%'),array('like','%学%'),'or');
四、统计查询
统计查询是对一组数据进行处理之后计算他们所具有的一些整体上的特征
count :统计数据的条数
$n = new Model(User); $n -> count();
max :统计数据的最大值
$n = new Model(User); $n -> max('id');
min :统计数据的最小值
$n = new Model(User); $n -> min('id');
avg :统计数据的平均值
$n = new Model(User); $n -> avg('id');
sum :统计数据的和
$n = new Model(User); $n -> sum('id');
五、SQL查询
在thinkPHP中,可以直接使用SQL语句封装的条件配合特定的方法进行数据的查询
首先了解thinkPHP中可以使用基层SQL语句进行查询的方法
query(“”);用于读取数据,成功返回数据的结果集即数组,失败则返回boolean false
execute(“”);用来更新数据的操作,成功则返回影响的行数,不成功则返回boolean false
查询方式举例
读取数据
$n = new Model(); $result = $n -> query("select * from tp_user where id > 20"); var_dump($result);
更新数据
$n = new Model(); $result = $n -> execute("insert into tp_user(username) values('波波')");//不要有在字段名之前加引号 $result = $n -> execute("insert into tp_user values('','波波','1')") var_dump($result);