ThinkPHP3.1新特性之查询条件预处理简介
以往的ThinkPHP3.0版本对数组方式的查询条件会进行安全过滤(这是由于3.0强制使用了字段类型检测,所以数组方式的查询条件会强制转换为字段的设定类型),但是3.0版本并不支持字符串条件的安全过滤。而ThinkPHP3.1版本则增加了对条件字符串进行预处理的支持,让ORM的安全性更加得以保证。
一、使用where方法
Model类的where方法支持字符串条件预处理,使用方式: $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();
如果$id变量来自用户提交或者URL地址的话,如果传入的是非数字类型,则会强制格式化为数字格式后进行查询操作。
字符串预处理格式类型支持指定数字、字符串等,具体可以参考vsprintf方法的参数说明。
二、使用query和execute方法
除了where条件外,对原生SQL查询方式也支持预处理机制,例如:
$Model->query("SELECT * FROM think_user WHERE id=%d and username='%s' and xx='%f'",array($id,$username,$xx));
模型的execute方法也和query方法一样支持预处理机制。
相关推荐
-
ThinkPHP查询中的魔术方法简述
我们在使用thinkphp开发的时候,有时候会用到getById('1')这个方法快速的获取一条信息的内容,这个方法比用where(" id =1 ")->find()好用多了,同时查询效率也比find快速. 很多人在刚开始接触这个方法的时候,没有多留意它的内部实现机制,仅仅认为是通过id来获取信息,而事实并非如此. 例如有的系统里存在getByTitle("nihao").getByMoney('1000')这类方法,这些与刚才提到的getById('1')
-
thinkphp学习笔记之多表查询
在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题 有以下三张表,分表为pl表(uid,content),user表(id,username),lyb表(uid,title) 多表查询操作有以下几种方法: ㈠视图模型(推荐) 定义视图模型,只需要继承Think\Model\ViewModel,然后设置viewFields属性即可 public $viewFields = array( 'pl' =>array('uid','rid','content'), 'user' =>arra
-
ThinkPHP查询返回简单字段数组的方法
本文实例讲述了ThinkPHP查询返回简单字段数组的方法,是ThinkPHP程序设计中一个很实用的功能.具体方法如下: 通常来说使用select语句.返回的都是结构较复杂的字段数组.如以下是一个简单的查询: $map['parentid'] = $id; $sub_ids = D('Category')->where($map)->field("catid")->select(); 查询后,得到的结果是: [{"catid":"23&qu
-
ThinkPHP视图查询详解
ThinkPHP提供的视图查询应用功能十分强大,用户利用视图查询功能可以将多个数据表的字段内容按需要进行指定和筛选,组织成一个基于这些数据表的视图模型,然后就可以通过该模型直接进行多表联合查询,非常方便和简单. 例如在项目中,我们定义有三个表: user 用户基础表, user_info 用户详细信息表, dept 部门分类表 现在我们需要获取某个用户信息, 该信息要包括用户的帐号名称和相关资料与及所在部门的名称, 这时候我们可以利用视图查询进行处理. 下
-
ThinkPHP多表联合查询的常用方法
ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: 复制代码 代码如下: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.',
-
ThinkPHP3.1查询语言详解
ThinkPHP的查询语言配合连贯操作可以很好解决复杂的业务逻辑需求,本篇我们就首先来深入了解下框架的查询语言. 1.查询语言介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取.更新和删除等操作,主要涉及到where方法等连贯操作即可,无论是采用什么数据库,你几乎采用一样的查询方法(个别数据库例如Mongo在表达式查询方面会有所差异),系统帮你解决了不同数据库的差异性,因此我们把框架的这一查询方式称之为查询语言.查询语言也是ThinkPHP框架的OR
-
thinkphp的CURD和查询方式介绍
对数据的读取 Read 复制代码 代码如下: $m=new Model('User'); $m=M('User'); select $m->select();//获取所有数据,以数组形式返回 find $m->find($id);//获取单条数据 getField(字段名)//获取一个具体的字段值 $arr=$m->where('id=2')->getField('username'); 三.ThinkPHP 3 创建数据 (重点) 对数据的添加 Create 复制代码 代码
-
thinkphp普通查询与表达式查询实例分析
本文实例讲述了thinkphp普通查询与表达式查询.分享给大家供大家参考.具体分析如下: 一.普通查询方式 a.字符串方式: 复制代码 代码如下: $arr=$m->where("sex=0 and username='gege'")->find();//字符串需要加引号 b.数组方式: 复制代码 代码如下: $data['sex']=0; $data['username']='gege'; $arr=$m->where($data)->find();//传
-
ThinkPHP中的常用查询语言汇总
本文实例汇总了ThinkPHP中的常用查询语言,供大家参考之用.相信能给大家ThinkPHP开发带来一定的帮助.具体如下: 一.普通查询: 在查询带入where条件等,最少有三种形式 1.字符串形式: 'id>5 and id<9' 2.数组形式: 示例代码如下: $user=M('user'); $data['username']='liwenkai'; $list=$user->where(array('username'=>'liwenkai'))->select();
-
thinkphp3查询mssql数据库乱码解决方法分享
thinkphp查询mssql数据库出现乱码的原因是ThinkPHP默认为UTF-8,而msmsql数据库是简体中文版,存储的是GB2312编码 解决方法: 1:在ThinkPHP\Lib\Core 打开Db.class.php,在其最后面加上2:在Db.class.php找到function select(),在$result = $this->query($sql);后面加一条 $result=iconv2utf8($result),就OK了 复制代码 代码如下: public functi
-
thinkphp实现like模糊查询实例
本文实例讲述了thinkphp实现like模糊查询的方法,分享给大家供大家参考.具体实现方法如下: 目前使用thinkphp框架进行项目开发的人越来越多了,由于其封装性较好,导致了很多纯PHP开发的部分不易上手,本文实例即以like模糊查询为例对此加以说明. 这里主要通过举例来说明用法: ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全. 一.使用字符串作为查询条件 这是最传统的方式,但是安全性不高, 例如: 复制代码 代码
-
ThinkPHP查询语句与关联查询用法实例
本文实例讲述了ThinkPHP查询语句与关联查询用法.分享给大家供大家参考.具体如下: 在thinkphp框架页面中我们可以直接拼写sql查询语句来实现数据库查询读写操作,下面就对此加以实例说明. 普通查询除了字符串查询条件外,数组和对象方式的查询条件是非常常用的,这些是基本查询所必须掌握的. 一.使用数组作为查询条件 复制代码 代码如下: $User = M("User"); //实例化User对象 $condition['name'] = 'thinkphp'; // 把查询条件传
随机推荐
- vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
- AngularJs Understanding the Model Component
- Asp.Net类型转换类(通用类)代码分享
- IOS HTTP请求的常见状态码总结
- JS实现自动定时切换的简洁网页选项卡效果
- ASP.NET学习路线(详细)
- php实现上传图片保存到数据库的方法
- JS正则子匹配实例分析
- python使用urllib模块开发的多线程豆瓣小站mp3下载器
- AnyChat的视频会议程序实例详解
- 解决hibernate+mysql写入数据库乱码
- JavaWeb连接数据库MySQL的操作技巧
- linux下的守护进程
- JQuery实现样式设置、追加、移除与切换的方法
- jquery text(),val(),html()方法区别总结
- 在Unity中实现简单的伪时间同步
- C++ 基类指针和子类指针相互赋值的实现方法
- C++ Coroutine简单学习教程
- Spring集成webSocket页面访问404问题的解决方法
- 详解如何解决docker容器无法通过IP访问宿主机问题