ThinkPHP 读取数据
在ThinkPHP中读取数据的方式很多,通常分为读取数据、读取数据集和读取字段值。
数据查询方法支持的连贯操作方法有:
| 连贯操作 | 作用 | 支持的参数类型 |
|---|---|---|
| where | 用于查询或者更新条件的定义 | 字符串、数组和对象 |
| table | 用于定义要操作的数据表名称 | 字符串和数组 |
| alias | 用于给当前数据表定义别名 | 字符串 |
| field | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
| order | 用于对结果排序 | 字符串和数组 |
| group | 用于对查询的group支持 | 字符串 |
| having | 用于对查询的having支持 | 字符串 |
| join | 用于对查询的join支持 | 字符串和数组 |
| union | 用于对查询的union支持 | 字符串、数组和对象 |
| distinct | 用于查询的distinct支持 | 布尔值 |
| lock | 用于数据库的锁机制 | 布尔值 |
| cache | 用于查询缓存 | 支持多个参数 |
| relation | 用于关联查询(需要关联模型支持) | 字符串 |
| result | 用于返回数据转换 | 字符串 |
| scope | 用于命名范围 | 字符串、数组 |
| bind | 用于数据绑定操作 | 数组 |
| comment | 用于SQL注释 | 字符串 |
| fetchSql | 不执行SQL而只是返回SQL | 布尔值 |
注意:某些情况下有些连贯操作是无效的,例如limit方法对find方法是无效的。
读取数据
读取数据是指读取数据表中的一行数据(或者关联数据),主要通过find方法完成,例如:
$User = M("User"); // 实例化User对象// 查找status值为1name值为think的用户数据$data = $User->where('status=1 AND name="thinkphp"')->find();dump($data);
find方法查询数据的时候可以配合相关的连贯操作方法,其中最关键的则是where方法,如何使用where方法我们会在查询语言章节中详细描述。
如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。 如果上面的查询成功的话,会输出:
array (size=3)'name' => string 'thinkphp' (length=8)'email' => string 'thinkphp@gmail.com' (length=18)'status'=> int 1
即使满足条件的数据不止一个,find方法也只会返回第一条记录(可以通过order方法排序后查询)。
还可以用data方法获取查询后的数据对象(查询成功后)
$User = M("User"); // 实例化User对象// 查找status值为1name值为think的用户数据$User->where('status=1 AND name="thinkphp"')->find();dump($User->data());
读取数据集
读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法,使用示例:
$User = M("User"); // 实例化User对象// 查找status值为1的用户数据 以创建时间排序 返回10条数据$list = $User->where('status=1')->order('create_time')->limit(10)->select();
如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。
读取字段值
读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。
示例如下:
$User = M("User"); // 实例化User对象// 获取ID为3的用户的昵称$nickname = $User->where('id=3')->getField('nickname');
默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。
如果需要返回整个列的数据,可以用:
$User->getField('id',true); // 获取id数组//返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值
如果传入多个字段的话,默认返回一个关联数组:
$User = M("User"); // 实例化User对象// 获取所有用户的ID和昵称列表$list = $User->getField('id,nickname');//两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组,以id的值为key,nickname字段值为value
这样返回的list是一个数组,键名是用户的id字段的值,键值是用户的昵称nickname。
如果传入多个字段的名称,例如:
$list = $User->getField('id,nickname,email');//返回的数组格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value))是一个二维数组,key还是id字段的值,但value是整行的array数组,类似于select()方法的结果遍历将id的值设为数组key
返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。
如果我们传入一个字符串分隔符:
$list = $User->getField('id,nickname,email',':');
那么返回的结果就是一个数组,键名是用户id,键值是 nickname:email的输出字符串。
getField方法还可以支持限制数量,例如:
$this->getField('id,name',5); // 限制返回5条记录$this->getField('id',3); // 获取id数组 限制3条记录
可以配合使用order方法使用。更多的查询方法可以参考查询语言章节。
ThinkPHP 读取数据的更多相关文章
- thinkphp 缓存数据
thinkphp 中内置了缓存操作 3.1版本的数据缓存方法是cache 基本用法: S(array('type'=>'xcache','expire'=>60)); 缓存初始化 缓存初始 ...
- struts2中从后台读取数据到<s:select>
看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...
- ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错
今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...
- MySQL数据库中tinyint类型字段读取数据为true和false
今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true 一.解决读取数据为true/false的问题 场景: 字段:stat ...
- My Game --文件读取数据
My Game --线段数据 中说到背景的绘制由贝赛尔曲线生成线段,用 DrawNode 画多边形,同时一张背景有两座山,一座山有两条以上贝赛尔曲线保存,用了嵌套的数据类:Bezier,LineLay ...
- Java—从文件中读取数据
1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message" ...
- 10天学会phpWeChat——第三天:从数据库读取数据到视图
在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...
- 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据
现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...
随机推荐
- spark2.+ sql 性能调优
1.在内存中缓存数据 性能调优主要是将数据放入内存中操作,spark缓存注册表的方法 版本 缓存 释放缓存 spark2.+ spark.catalog.cacheTable("tableN ...
- 《转》python学习基础
学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginM ...
- 312. 戳气球【困难】【区间DP】
题目链接 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * ...
- 初学者学习PHP开发应该掌握的几段精华代码
来自:http://hi.baidu.com/dckhello/item/d62b16d8994bf93449e1ddb0 经典循环例子 <HTML><HEAD><TIT ...
- linux段位进阶
1.青铜: 1.Linux基础知识.基本命令(起源.组成.常用命令如cp.ls.file.mkdir等常见操作命令) 2.Linux用户及权限基础 3.Linux系统进程管理进阶 4.linux高效文 ...
- springboot 简单搭建(thymeleaf 视图显示)
接口访问参考:https://blog.csdn.net/hanjun0612/article/details/81625395 PS:调用接口和跳转网页 主要区别是 1 调用接口是 @RestCon ...
- Elasticsearch.net一些开发笔记
.net下开发es半年多了,留下些笔记 //https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters. ...
- 解决Keep-Alive 和 Close 不能使用此属性设置
http://www.hejingzong.cn/blog/viewblog_86.aspx Keep-Alive 和 Close 不能使用此属性设置 public static void SetHe ...
- asprise-ocr-api-sample 高价收破解版64 32位
asprise-ocr-api-sample验证码 高价收破解版64 32位 Reflector 8.5 打开自己的C#代码 完全100%的反编译了
- ubuntu切换到root用户
我们都知道使用su root命令,去切换到root权限,此时会提示输入密码,可是怎么也输不对,提示"Authentication failure", 解决办法如下 su root ...