在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方法完成,例如:

  1. $User = M("User"); // 实例化User对象
  2. // 查找status值为1name值为think的用户数据
  3. $data = $User->where('status=1 AND name="thinkphp"')->find();
  4. dump($data);

find方法查询数据的时候可以配合相关的连贯操作方法,其中最关键的则是where方法,如何使用where方法我们会在查询语言章节中详细描述。

如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。 如果上面的查询成功的话,会输出:

  1. array (size=3)
  2. 'name' => string 'thinkphp' (length=8)
  3. 'email' => string 'thinkphp@gmail.com' (length=18)
  4. 'status'=> int 1

即使满足条件的数据不止一个,find方法也只会返回第一条记录(可以通过order方法排序后查询)。

还可以用data方法获取查询后的数据对象(查询成功后)

  1. $User = M("User"); // 实例化User对象
  2. // 查找status值为1name值为think的用户数据
  3. $User->where('status=1 AND name="thinkphp"')->find();
  4. dump($User->data());

读取数据集

读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法,使用示例:

  1. $User = M("User"); // 实例化User对象
  2. // 查找status值为1的用户数据 以创建时间排序 返回10条数据
  3. $list = $User->where('status=1')->order('create_time')->limit(10)->select();

如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。

读取字段值

读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。

示例如下:

  1. $User = M("User"); // 实例化User对象
  2. // 获取ID为3的用户的昵称
  3. $nickname = $User->where('id=3')->getField('nickname');

默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。

如果需要返回整个列的数据,可以用:

  1. $User->getField('id',true); // 获取id数组
  2. //返回数据格式如array(1,2,3,4,5)一维数组,其中value就是id列的每行的值

如果传入多个字段的话,默认返回一个关联数组:

  1. $User = M("User"); // 实例化User对象
  2. // 获取所有用户的ID和昵称列表
  3. $list = $User->getField('id,nickname');
  4. //两个字段的情况下返回的是array(`id`=>`nickname`)的关联数组,以id的值为key,nickname字段值为value

这样返回的list是一个数组,键名是用户的id字段的值,键值是用户的昵称nickname。

如果传入多个字段的名称,例如:

  1. $list = $User->getField('id,nickname,email');
  2. //返回的数组格式是array(`id`=>array(`id`=>value,`nickname`=>value,`email`=>value))是一个二维数组,key还是id字段的值,但value是整行的array数组,类似于select()方法的结果遍历将id的值设为数组key

返回的是一个二维数组,类似select方法的返回结果,区别的是这个二维数组的键名是用户的id(准确的说是getField方法的第一个字段名)。

如果我们传入一个字符串分隔符:

  1. $list = $User->getField('id,nickname,email',':');

那么返回的结果就是一个数组,键名是用户id,键值是 nickname:email的输出字符串。

getField方法还可以支持限制数量,例如:

  1. $this->getField('id,name',5); // 限制返回5条记录
  2. $this->getField('id',3); // 获取id数组 限制3条记录

可以配合使用order方法使用。更多的查询方法可以参考查询语言章节。

 

ThinkPHP 读取数据的更多相关文章

  1. thinkphp 缓存数据

    thinkphp 中内置了缓存操作 3.1版本的数据缓存方法是cache 基本用法: S(array('type'=>'xcache','expire'=>60)); 缓存初始化 缓存初始 ...

  2. struts2中从后台读取数据到<s:select>

    看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...

  3. [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...

  4. ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错

    今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...

  5. MySQL数据库中tinyint类型字段读取数据为true和false

    今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true 一.解决读取数据为true/false的问题 场景: 字段:stat ...

  6. My Game --文件读取数据

    My Game --线段数据 中说到背景的绘制由贝赛尔曲线生成线段,用 DrawNode 画多边形,同时一张背景有两座山,一座山有两条以上贝赛尔曲线保存,用了嵌套的数据类:Bezier,LineLay ...

  7. Java—从文件中读取数据

    1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message" ...

  8. 10天学会phpWeChat——第三天:从数据库读取数据到视图

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

  9. 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据

    现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...

随机推荐

  1. spark2.+ sql 性能调优

    1.在内存中缓存数据 性能调优主要是将数据放入内存中操作,spark缓存注册表的方法 版本 缓存 释放缓存 spark2.+ spark.catalog.cacheTable("tableN ...

  2. 《转》python学习基础

    学习的python本来想自己总结,但是发现了一篇不错的大牛的博客,拿来主义,,又被我实践了 关于前两篇如果总结的不详细,因此把他人的转载过来 http://www.cnblogs.com/BeginM ...

  3. 312. 戳气球【困难】【区间DP】

    题目链接 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * ...

  4. 初学者学习PHP开发应该掌握的几段精华代码

    来自:http://hi.baidu.com/dckhello/item/d62b16d8994bf93449e1ddb0 经典循环例子 <HTML><HEAD><TIT ...

  5. linux段位进阶

    1.青铜: 1.Linux基础知识.基本命令(起源.组成.常用命令如cp.ls.file.mkdir等常见操作命令) 2.Linux用户及权限基础 3.Linux系统进程管理进阶 4.linux高效文 ...

  6. springboot 简单搭建(thymeleaf 视图显示)

    接口访问参考:https://blog.csdn.net/hanjun0612/article/details/81625395 PS:调用接口和跳转网页 主要区别是 1 调用接口是 @RestCon ...

  7. Elasticsearch.net一些开发笔记

    .net下开发es半年多了,留下些笔记 //https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-filters. ...

  8. 解决Keep-Alive 和 Close 不能使用此属性设置

    http://www.hejingzong.cn/blog/viewblog_86.aspx Keep-Alive 和 Close 不能使用此属性设置 public static void SetHe ...

  9. asprise-ocr-api-sample 高价收破解版64 32位

    asprise-ocr-api-sample验证码 高价收破解版64 32位 Reflector 8.5 打开自己的C#代码  完全100%的反编译了

  10. ubuntu切换到root用户

    我们都知道使用su root命令,去切换到root权限,此时会提示输入密码,可是怎么也输不对,提示"Authentication failure", 解决办法如下 su root ...