thinkphp-数据库操作

1 数据库查询

ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作。

查询条件可以用于CURD等任何操作,作为where方法的参数传入即可。

1.1 ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。

查询方式

一、使用字符串作为查询条件
这是最传统的方式,但是安全性不高,例如:

  1. $User = M("User"); // 实例化User对象
  2. $User->where(‘type=1 AND status=1‘)->select();

最后生成的SQL语句是
SELECT * FROM think_user WHERE type=1 AND status=1

二、使用数组作为查询条件

  1. $User = M("User"); // 实例化User对象
  2. $condition[‘name‘] = ‘thinkphp‘;
  3. $condition[‘status‘] = 1;
  4. // 把查询条件传入查询方法
  5. $User->where($condition)->select();

最后生成的SQL语句是
SELECT * FROM think_user WHERE ‘name‘=‘thinkphp‘ AND status=1
如果进行多字段查询,那么字段之间的默认逻辑关系是 逻辑与 AND,但是用下面的规则可以更改默认的逻辑判断,通过使用 _logic 定义查询逻辑:

  1. $User = M("User"); // 实例化User对象
  2. $condition[‘name‘] = ‘thinkphp‘;
  3. $condition[‘account‘] = ‘thinkphp‘;
  4. $condition[‘_logic‘] = ‘OR‘; //定义查询逻辑
  5. // 把查询条件传入查询方法
  6. $User->where($condition)->select();

最后生成的SQL语句是
SELECT * FROM think_user WHERE ‘name‘=‘thinkphp‘ OR `account`=‘thinkphp‘

三、使用对象方式来查询 (这里以stdClass内置对象为例)

  1. $User = M("User"); // 实例化User对象
  2. // 定义查询条件
  3. $condition = new stdClass();
  4. $condition->name = ‘thinkphp‘;
  5. $condition->status= 1;
  6. $User->where($condition)->select();

最后生成的SQL语句和上面一样
SELECT * FROM think_user WHERE `name`=‘thinkphp‘ AND status=1
使用对象方式查询和使用数组查询的效果是相同的,并且是可以互换的,大多数情况下,我们建议采用数组方式更加高效,后面我们会以数组方式为例来讲解具体的查询语言用法。

1.2表达式查询

  上面的查询条件仅仅是一个简单的相等判断,可以使用查询表达式支持更多的SQL查询语法,并且可以用于数组或者对象方式的查询(下面仅以数组方式为例说明),查询表达式的使用格式:
$map[‘字段名‘] = array(‘表达式‘,‘查询条件‘);
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:

表达式 含义
EQ 等于(=)
NEQ 不等于(<>)
GT 大于(>)
EGT 大于等于(>=)
LT 小于(<)
ELT 小于等于(<=)
LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询
EXP 表达式查询,支持SQL语法

 $map[‘id‘]  = array(‘eq‘,100);  id = 100;

 $map[‘id‘]  = array(‘egt‘,100);id >= 100

 $map[‘name‘] = array(‘like‘,‘thinkphp%‘); name like ‘thinkphp%‘ 模糊查询

 $map[‘a‘] =array(‘like‘,array(‘%thinkphp%‘,‘%tp‘),‘OR‘);$map[‘b‘] =array(‘notlike‘,array(‘%thinkphp%‘,‘%tp‘),‘AND‘); (a like ‘%thinkphp%‘ OR a like ‘%tp‘) AND (b not like ‘%thinkphp%‘ AND b not like ‘%tp‘)

2、连贯操作

  ThinkPHP模型基础类提供的连贯操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下:

  1. $User->where(‘status=1‘)->order(‘create_time‘)->limit(10)->select();

这里的where、order和limit方法就被称之为连贯操作方法,除了select方法必须放到最后一个外(因为select方法并不是连贯操作方法),连贯操作的方法调用顺序没有先后,例如,下面的代码和上面的等效:

  1. $User->order(‘create_time‘)->limit(10)->where(‘status=1‘)->select();

如果不习惯使用连贯操作的话,还支持直接使用参数进行查询的方式。例如上面的代码可以改写为:

  1. $User->select(array(‘order‘=>‘create_time‘,‘where‘=>‘status=1‘,‘limit‘=>‘10‘));

使用数组参数方式的话,索引的名称就是连贯操作的方法名称。其实T不仅仅是查询方法可以使用连贯操作,包括所有的CURD方法都可以使用,例如:

  1. $User->where(‘id=1‘)->field(‘id,name,email‘)->find();
  2. $User->where(‘status=1 and id=1‘)->delete();

连贯操作通常只有一个参数,并且仅在当此查询或者操作有效,完成后会自动清空连贯操作的所有传值(有个别特殊的连贯操作有多个参数,并且会记录当前的传值)。简而言之,连贯操作的结果不会带入以后的查询。
系统支持的连贯操作方法有:

连贯操作 作用 支持的参数类型
where 用于查询或者更新条件的定义 字符串、数组和对象
table 用于定义要操作的数据表名称 字符串和数组
alias 用于给当前数据表定义别名 字符串
data 用于新增或者更新数据之前的数据对象赋值 数组和对象
field 用于定义要查询的字段(支持字段排除) 字符串和数组
order 用于对结果排序 字符串和数组
limit 用于限制查询结果数量 字符串和数字
page 用于查询分页(内部会转换成limit 字符串和数字
group 用于对查询的group支持 字符串
having 用于对查询的having支持 字符串
join* 用于对查询的join支持 字符串和数组
union* 用于对查询的union支持 字符串、数组和对象
distinct 用于查询的distinct支持 布尔值
lock 用于数据库的锁机制 布尔值
cache 用于查询缓存 支持多个参数
relation 用于关联查询(需要关联模型支持) 字符串

所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。

thinkphp-数据库操作,布布扣,bubuko.com

时间: 2024-10-24 15:46:40

thinkphp-数据库操作的相关文章

扣出thinkphp数据库操作类

假如你是一位thinkphp的使用者,想必你会觉得thinkphp操作数据库非常方便.现在在你面前有一个非常小的作业,小到完全没有必要用thinkphp去完成它.但是你又觉得不用thinkphp的话,操作数据库非常麻烦.这时,你陷入了左右为难的境况.那么,下面我要分享的这个数据库操作类,可能会帮助你摆脱这种困境.这个数据库操作类虽然不能说是完全从thinkphp里扣出来的,但多多少少能看到thinkphp当年的影子,使用起来非常类似,真是方便好用啊.好了,马上来演示一下基本用法吧. 首先来演示一

ThinkPHP 数据库操作(二) : 增删改查

基本使用 可以直接使用数据库运行原生SQL操作了,支持 query (查询操作)和 execute (写入操作)方法,并且支持参数绑定. Db::query('select * from think_user where id=?',[8]); Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']); 也支持命名占位符绑定,例如: Db::query('select * from think_us

thinkphp数据库操作Model模型

Model是对数据库的操作 之前两章已经说了MVC中的V(view)和C(controller),这一章主要讲M(model). 一.连接数据库 首先要创造一个操作数据库 之后打开shop查看原始配置 之后我们去配置自己的数据库 这样,数据库就配置好了. 二.创建model类 原则上来讲,一个model对应一个数据表,有一个数据表就要对应一个model 控制器如何创建,model就如何创建 注意: Model要和Admin以及Home平行存放,使得既能让Home使用,又能让Admin使用 创建一

thinkphp数据库操作类

查询方法:$db->table('user')->limit(10)->order('id desc')->select(); 相当于执行下面的sql语句,并返回二维数组.SELECT * FROM `user` ORDER BY id desc LIMIT 10 $where['user_name'] = array('like','%ly%');  $where['credit'] = array('gt',100);  $db->table('user')->wh

thinkphp对数据库操作有哪些内置函数

原文:thinkphp对数据库操作有哪些内置函数 getModelName() 获取当前Model的名称 getTableName() 获取当前Model的数据表名称 switchModel(type,vars=array()) 动态切换模型 table() 设置当前操作的数据表 field() 设置要查询的数据字段 where() 设置查询或者操作条件 data(data) 设置数据对象 order(order) 设置排序 limit(limit) 查询限制 page(page) 查询分页 j

ThinkPhp框架的数据库操作(查询)

TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. 代码写在index方法中. 数据库的定义方式有三种. 前两种要写模型函数,最后一种不需要. 模型的例子(放在Model文件夹下,名字与类名相同,本例的名字:UserModel.class.php) <?php namespace Admin\Model; use Think\Model; class

ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )

//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: public function testdb(){ $obj=M("User"); dump($obj); } 此时浏览器输出: object(Model)#5 (20) { ["_extModel:private"] => NULL ["db:protecte

ThinkPHP-基础数据库操作CRUD

参考:http://doc.thinkphp.cn/manual/curd.html ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法.CURD操作通常是可以和连贯操作配合完成的.下面来分析下各自的用法:(下面的CURD操作我们均以M方法创建模型实例来说明,因为不涉及到具体的业务逻辑) 创建(Create) 在ThinkPHP中使用add方法新增数据到数据库(

ThinkPHP CURD操作

ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法.CURD操作通常是可以和连贯操作配合完成的.下面来分析下各自的用法: (下面的CURD操作我们均以M方法创建模型实例来说明,因为不涉及到具体的业务逻辑) 创建(Create) 在ThinkPHP中使用add方法新增数据到数据库(而并不是create方法). add  写入(新增)数据到数据库 用法 add($d

thinkPHP 连贯操作

在手册中的位置为 模型->连贯操作 一.常用连贯操作    1.where        帮助我们设置查询条件    2.order            对结果进行排序        $arr=$m->order('id desc')->select();        $arr=$m->order(array('id'=>'desc','sex'=>'asc'))->select();    3.limit            限制结果        lim