# 数据读取

在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方法使用。更多的查询方法可以参考[查询语言](#)章节。

php记录读取数据类型,数据读取 · ThinkPHP 3.2.3开发手册 · 看云相关推荐

  1. php tp3.2 添加表内容,数据创建 · ThinkPHP3.2.3完全开发手册 · 看云

    在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: ~~~ // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['ema ...

  2. 数据缓存 php,数据缓存 · ThinkPHP3.2.3完全开发手册 · 看云

    在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如: ## 缓存初始化 ~~~ // 缓存初始化 S(array('type ...

  3. php thinkphp中间件,中间件 · ThinkPHP6.0完全开发手册 · 看云

    中间件主要用于拦截或过滤应用的`HTTP`请求,并进行必要的业务处理. >[danger] 新版部分核心功能使用中间件处理,你可以灵活关闭.包括Session功能.请求缓存和多语言功能. ## ...

  4. thinkphp+mysql+join+where_join · ThinkPHP5.1完全开发手册 · 看云

    `JOIN`方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据.join通常有下面几种类型,不同类型的join操作会影响返回的数据结果. - **INNER JOIN**: 等同于 JOIN ...

  5. STM32利用flash读取音频数据读取与DAC播放

    目录 一.博客内容 二.Flash地址空间的读取 2.1 Flash原理 2.2 软.硬件准备 2.3 利用CubeMX建立工程 2.4 工程代码 2.5 ST-Link的使用 ​2.6 仿真调试 三 ...

  6. 1.php查询数据,查询数据 - ThinkPHP 5.1 完全开发手册

    基本查询 查询单个数据使用find方法: // table方法必须指定完整的数据表名 Db::table('think_user')->where('id',1)->find(); 最终生 ...

  7. php 数据中心,数据层 · Thinkphp 独立数据中心使用手册 · 看云

    [TOC] ## 概述 数据层是用来直接操作数据表的,数据层的方法都是原子的操作,应避免在数据层中处理具体业务流程,具体业务流程应在逻辑层进行处理. ## 数据层类定义 数据层类通常需要继承核心的\t ...

  8. php api开发书籍,概述 · ThinkPHP API开发入门 · 看云

    [![邀请链接](https://img.kancloud.cn/bd/9e/bd9ee1bb6c29f7cad10b6e069b1907da_728x90.jpg)](https://www.kan ...

  9. php心跳检测实时数据,心跳检测 · swoole手册 · 看云

    # 心跳 注意:长链接应用必须加心跳,否则链接可能由于长时间未通讯被路由节点强行断开. 心跳作用主要有两个: 1.客户端定时给服务端发送点数据,防止连接由于长时间没有通讯而被某些节点的防火墙关闭导致连 ...

最新文章

  1. 自然语言处理(NLP)之pyltp的介绍与使用(中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注)
  2. RAC修改数据库的spfile位置
  3. AlphaGo背后的搜索算法:蒙特卡罗树搜索 alphago 代码
  4. 【转】Linux定时任务系统Cron入门
  5. Matlab 图像处理的一些杂记
  6. String.valueOf(Object)与Objects.toString(Object)
  7. [react] 和Component两者的区别是什么
  8. oracle load select,Oracle数据库的Load详解
  9. 面向小姐姐的编程——JAVA面向对象之封装(二)
  10. 知识与智慧的区别是什么?
  11. JavaScript笔记杂谈篇(啥都有)
  12. Soulver:不光会算,还懂你所言的计算器
  13. Excel VBA数组使用方法
  14. Hibernate_01_初体验
  15. maven打包时加入依赖jar包
  16. vb.net 教程 6-14 终止线程的例子
  17. android中界面布局文件放在,android界面布局详解.doc
  18. 用iscsi和DHCP搭建一个windows无盘系统站【笔记】
  19. 计算机文化基础简答题
  20. 服务器封包协议号,DHCP协议的租约确认和封包格式

热门文章

  1. Linux下Poppler源码编译安装
  2. 详解Java中Map用法
  3. 泛函分析4——希尔伯特空间
  4. 最优化——单纯形法学习心得
  5. 强化学习2——有模型强化学习MDP(搬砖马尔科夫,贝尔曼等式)
  6. 机械硬盘低级格式化软件_低级比高级安全?磁盘格式化要保护秘密
  7. 传说之下地图素材_文旅黄陵——轩辕黄帝传说故事(十一) 杜康酿酒的传说...
  8. 4.1.3 OS之文件目录目录结构(单级-两级-多级-无环图)、索引节点FCB瘦身
  9. ppt批量缩略图_PPT如何在文件夹下显示缩略图的方法
  10. OS / Linux / clone、fork、vfork 与 pthread_create 创建线程有何不同