thinkphp的where方法的使用

1.Thinkphp中where()条件的使用

  总是有人觉得,thinkphp的where()就是写我要进行增加、查询、修改、删除数据的条件,很简单的,其实我想告诉你,where()是写条件语句的,但是他很不简单,严密的条件语句,可以有效的防止sql注入,也可以加强sql语句的严密性,也有利于进行搜索查询

  1.1查询方法分类

  where方法的用法是ThinkPHP查询语言的精髓,可以完成包括普通查询、表达式查询、快捷查询、区间查询、组合查询在内的查询操作。where方法的参数支持字符串和数组,虽然也可以使用对象但并不建议。

  1.1.1字符串条件

  使用字符串条件直接查询和操作(TP框架控制器中的条件语句可以在/Runtime/Logs/.. 里面找到,可以对比)

  例:$User = M("User"); // 实例化User对象

    $User->where(‘type=1 AND status=1‘)->select();

    生成sql语句:SELECT * FROM user WHERE type=1 AND status=1;

  

  在TP版本3.1以上时,建议配合预处理机制,确保更加安全,可以有效的防sql注入

  $Model->where("id=%d and username=‘%s‘ and xx=‘%f‘",array($id,$username,$xx))->select();

  或者:$Model->where("id=%d and username=‘%s‘ and xx=‘%f‘",$id,$username,$xx)->select();

  1.1.2数组条件

  最简单的数组条件查询:

  $User = M("User"); // 实例化User对象

$map[‘name‘] = ‘thinkphp‘;

$map[‘status‘] = 1;

// 把查询条件传入查询方法

$User->where($map)->select();

  生成的SQL语句:SELECT * FROM user WHERE `name`=‘thinkphp‘ AND status=1

  

  1.1.3表达式查询

  $map[‘字段1‘]  = array(‘表达式‘,‘查询条件1‘);

$map[‘字段2‘]  = array(‘表达式‘,‘查询条件2‘);

$Model->where($map)->select();

  

  1.1.4表达式中运算符条件的查询

  TP运算符

  SQL运算符 例子 实际查询条件
eq = $map[‘id‘] = array(‘eq‘,100); 等效于:$map[‘id‘] = 100;
neq != $map[‘id‘] = array(‘neq‘,100); id != 100
gt > $map[‘id‘] = array(‘gt‘,100); id > 100
egt >= $map[‘id‘] = array(‘egt‘,100); id >= 100
lt < $map[‘id‘] = array(‘lt‘,100); id < 100
elt <= $map[‘id‘] = array(‘elt‘,100); id <= 100
like like $map<‘username‘> = array(‘like‘,‘Admin%‘); username like ‘Admin%‘
between between and $map[‘id‘] = array(‘between‘,‘1,8‘); id BETWEEN 1 AND 8
not between not between and $map[‘id‘] = array(‘not between‘,‘1,8‘); id NOT BETWEEN 1 AND 8
in in $map[‘id‘] = array(‘in‘,‘1,5,8‘); id in(1,5,8)
not in not in $map[‘id‘] = array(‘not in‘,‘1,5,8‘); id not in(1,5,8)
and(默认) and $map[‘id‘] = array(array(‘gt‘,1),array(‘lt‘,10)); (id > 1) AND (id < 10)
or or $map[‘id‘] = array(array(‘gt‘,3),array(‘lt‘,10), ‘or‘); (id > 3) OR (id < 10)
xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
exp 综合表达式 $map[‘id‘] = array(‘exp‘,‘in(1,3,8)‘); $map[‘id‘] = array(‘in‘,‘1,3,8‘);
时间: 2024-10-10 13:25:31

thinkphp的where方法的使用的相关文章

thinkphp中limit方法

limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 用法 限制结果数量 例如获取满足要求的10个用户,如下调用即可: $User = M('User');$User->where('status=1')->field('id,name')->limit(10)->select(); limit方法也可以用于写操作,例如更新满足要求的3条数据: $User = M('U

[ThinkPHP]延迟更新方法的陷阱

[code] $M = D('Article'); $M->where(array('id'=>1))->setLazyInc('click',1,600);//文章访问数量+1,延迟更新 $list = $M->where(array('status'=>0))->limit("0,10")->select();//读取文档列表 [/code] 这时候你打印$list,会发现只有一条记录. 将sql语句打印出来会发现: [code] sele

数据库分表和分库的原理及基于thinkPHP的实现方法

为什么要分表,分库: 当我们的数据表数据量,访问量很大,或者是使用频繁的时候,一个数据表已经不能承受如此大的数据访问和存储,所以,为了减轻数据库的负担,加快数据的存储,就需要将一张表分成多张,及将一类数据存入不同的几张表,当分表已经不能满足需求是,我们还可以分库,及用几个数据库存储. 分表会随着需求和功能的不同有不同的实现方法,下面是我做项目中的一个例子: 需求:product,product_price两张表是一对多的关系,及产品和产品每日的价格,一个产品对应几种价格,现在由于产品表数据量很大

ThinkPHP中F方法快速缓存实例

一般使用文件方式的缓存就能够满足要求,而thinkPHP还提供了一个专门用于文件方式的快速缓存方法F方法. 由于采用的是PHP返回方式,所以其效率较S方法较高.F方法具有如下特点:1.简单数据缓存:2.文件形式保存:3.采用PHP返回数据方式加载缓存:4.支持子目录缓存以及自动创建:5.支持删除缓存和批量删除:$path="../Public/Runtime/";$str="fastrunaaaaaaaaaaaaaaaa";F("str/ffun"

ThinkPHP的field方法的用法总结

ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段,下面详细道来. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model->field('id,title,content')->select(); 这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值.执行的SQL相当于: SELECT id,title,content FROM table 当然,除了select方法之外,所有

ThinkPHP中create()方法自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段, 在控制器中使用create()方法,(返回值为true/false),会自动触发模型类中的$_validate属性(为父类Model中的方法,在子类Model中重写),在$_validate中自定义验证规则(验证规则下面会详细说明),当create()方法没有数据即返回值为fals

ThinkPHP之中getlist方法实现数据搜索功能

自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like  %string%,或者其他的 字段名=特定值,这些sql语句拼接在and语句之中: HTML之中: 1 <form action="" method="get"> 2 <table class="account_table" width="100%" cellpadding="

ThinkPHP的A方法,R方法,M方法,D方法区别

在Thinkphp中,实例化对象有这么几种方法,如果是类,有A和R方法,区别是A方法只是对象的实例化,而R方法是可以同时实例化对象里面的方法的,这里需要去指定,如下面的实例代码: 1 <?php 2 namespace Admin\Controller; 3 use Think\Controller; 4 5 class GoodsController extends Controller{ 6 public function showlist(){ 7 8 //实例化控制器A方法 9 $tes

phpstorm 支持 ThinkPHP 框架的方法

在网上找了好久,各种推荐和设置,都没什么用,最后决定到 phpstrom 插件库里面搜一下,还真找到了. 1. 进入 File - Setting - Plugins ,搜索 ThinkPHP 关键字,提示说没有完全符合的: 2. 仔细观察后,下面有一个类似的,即 Thinkstorm,点开看一下注释,支持 D() 和 M() 方法... 3. 安装后测试,随便试了几个用法,还不错.