# 生成查询结果
有几种不同方法可以生成查询结果:
[TOC=2,3]
## 结果数组
**result()** 方法
该方法以**对象数组**形式返回查询结果,如果查询失败返回**空数组**。 一般情况下,你会像下面这样在一个 foreach 循环中使用它:
~~~
$query = $this->db->query("YOUR QUERY");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
~~~
该方法是 result_object() 方法的别名。
如果你的查询可能会没有结果,推荐在处理结果之前,先使用方法 num_rows() 检验一下:
~~~
$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
}
~~~
你还可以传一个字符串参数给 result() 方法,这个字符串参数代表 你想要把每个结果转换成某个类的类名(这个类必须已经加载)
~~~
$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $user)
{
echo $user->name; // access attributes
echo $user->reverse_name(); // or methods defined on the 'User' class
}
~~~
**result_array()** 方法
这个方法以**一个纯粹的数组**形式返回查询结果,如果无结果,则返回一个空数组。 一般情况下,你会像下面这样在一个 foreach 循环中使用它:
~~~
$query = $this->db->query("YOUR QUERY");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
~~~
## 结果行
**row()** 方法
这个方法返回单独一行结果。如果你的查询不止一行结果,它只返回第一行。 返回的结果是**对象**形式,这里是用例:
~~~
$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
$row = $query->row();
echo $row->title;
echo $row->name;
echo $row->body;
}
~~~
如果你要返回特定行的数据,你可以将行号作为第一个参数传给这个方法:
~~~
$row = $query->row(5);
~~~
你还可以加上第二个参数,该参数为字符串类型,代表你想要把结果转换成某个类的类名:
~~~
$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$row = $query->row(0, 'User');
echo $row->name; // access attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
~~~
**row_array()** 方法
这个方法除了返回结果是一个数组而不是一个对象之外,其他的和上面的 row() 方法完全一样。 举例:
~~~
$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
~~~
如果你要返回特定行的数据,你可以将行号作为第一个参数传给这个方法:
~~~
$row = $query->row_array(5);
~~~
另外,你可以使用下面这些方法从你的结果集中获取前一个、后一个、 第一个或者最后一个结果:
>
>
>
>
> **$row = $query->first_row()**
>
> **$row = $query->last_row()**
>
> **$row = $query->next_row()**
>
> **$row = $query->previous_row()**
>
>
>
>
这些方法默认返回对象,如果需要返回数组形式,将单词 "array" 作为参数传入方法即可:
>
>
>
>
> **$row = $query->first_row('array')**
>
> **$row = $query->last_row('array')**
>
> **$row = $query->next_row('array')**
>
> **$row = $query->previous_row('array')**
>
>
>
>
注解
上面所有的这些方法都会把所有的结果加载到内存里(预读取), 当处理大结果集时最好使用 unbuffered_row() 方法。
**unbuffered_row()** 方法
这个方法和 row() 方法一样返回单独一行结果,但是它不会预读取所有的结果数据到内存中。 如果你的查询结果不止一行,它将返回当前一行,并通过内部实现的指针来移动到下一行。
~~~
$query = $this->db->query("YOUR QUERY");
while ($row = $query->unbuffered_row())
{
echo $row->title;
echo $row->name;
echo $row->body;
}
~~~
为了指定返回值的类型,可以传一个字符串参数 'object'(默认值) 或者 'array' 给这个方法:
~~~
$query->unbuffered_row(); // object
$query->unbuffered_row('object'); // object
$query->unbuffered_row('array'); // associative array
~~~
## 结果辅助方法
**num_rows()** 方法
该方法返回查询结果的行数。注意:在这个例子中,$query 变量为查询结果对象:
~~~
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();
~~~
注解
并不是所有的数据库驱动器都有原生的方法来获取查询结果的总行数。 当遇到这种情况时,所有的数据会被预读取到内存中,并调用 count() 函数 来取得总行数。
**num_fields()** 方法
该方法返回查询结果的字段数(列数)。在你的查询结果对象上调用该方法:
~~~
$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_fields();
~~~
**free_result()** 方法
该方法释放掉查询结果所占的内存,并删除结果的资源标识。通常来说, PHP 会在脚本执行结束后自动释放内存。但是,如果你在某个脚本中执行大量的查询, 你可能需要在每次查询之后释放掉查询结果,以此来降低内存消耗。
举例:
~~~
$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // The $query result object will no longer be available
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // The $query2 result object will no longer be available
~~~
**data_seek()** 方法
这个方法用来设置下一个结果行的内部指针,它只有在和 unbuffered_row() 方法一起使用才有效果。
它接受一个正整数参数(默认值为0)表示想要读取的下一行,返回值为 TRUE 或 FALSE 表示成功或失败。
~~~
$query = $this->db->query('SELECT `field_name` FROM `table_name`');
$query->data_seek(5); // Skip the first 5 rows
$row = $query->unbuffered_row();
~~~
注解
并不是所有的数据库驱动器都支持这一特性,调用这个方法将会返回 FALSE, 譬如你无法在 PDO 上使用它。
## 类参考
classCI_DB_result
result([$type = 'object'])
参数:
* **$type** (string) -- Type of requested results - array, object, or class name
返回: Array containing the fetched rows
返回类型: array
A wrapper for the result_array(), result_object() and custom_result_object() methods.
Usage: see [结果数组](http://codeigniter.org.cn/user_guide/database/results.html#id2).
result_array()
返回: Array containing the fetched rows
返回类型: array
Returns the query results as an array of rows, where each row is itself an associative array.
Usage: see [结果数组](http://codeigniter.org.cn/user_guide/database/results.html#id2).
result_object()
返回: Array containing the fetched rows
返回类型: array
Returns the query results as an array of rows, where each row is an object of type stdClass.
Usage: see [结果数组](http://codeigniter.org.cn/user_guide/database/results.html#id2).
custom_result_object($class_name)
参数:
* **$class_name** (string) -- Class name for the resulting rows
返回: Array containing the fetched rows
返回类型: array
Returns the query results as an array of rows, where each row is an instance of the specified class.
row([$n = 0[, $type = 'object']])
参数:
* **$n** (int) -- Index of the query results row to be returned
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: The requested row or NULL if it doesn't exist
返回类型: mixed
A wrapper for the row_array(), row_object() and ``custom_row_object() methods.
Usage: see [结果行](http://codeigniter.org.cn/user_guide/database/results.html#id3).
unbuffered_row([$type = 'object'])
参数:
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: Next row from the result set or NULL if it doesn't exist
返回类型: mixed
Fetches the next result row and returns it in the requested form.
Usage: see [结果行](http://codeigniter.org.cn/user_guide/database/results.html#id3).
row_array([$n = 0])
参数:
* **$n** (int) -- Index of the query results row to be returned
返回: The requested row or NULL if it doesn't exist
返回类型: array
Returns the requested result row as an associative array.
Usage: see [结果行](http://codeigniter.org.cn/user_guide/database/results.html#id3).
row_object([$n = 0])
参数:
* **$n** (int) -- Index of the query results row to be returned :returns: The requested row or NULL if it doesn't exist
返回类型: stdClass
Returns the requested result row as an object of type stdClass.
Usage: see [结果行](http://codeigniter.org.cn/user_guide/database/results.html#id3).
custom_row_object($n, $type)
参数:
* **$n** (int) -- Index of the results row to return
* **$class_name** (string) -- Class name for the resulting row
返回: The requested row or NULL if it doesn't exist
返回类型: $type
Returns the requested result row as an instance of the requested class.
data_seek([$n = 0])
参数:
* **$n** (int) -- Index of the results row to be returned next
返回: TRUE on success, FALSE on failure
返回类型: bool
Moves the internal results row pointer to the desired offset.
Usage: see [结果辅助方法](http://codeigniter.org.cn/user_guide/database/results.html#id4).
set_row($key[, $value = NULL])
参数:
* **$key** (mixed) -- Column name or array of key/value pairs
* **$value** (mixed) -- Value to assign to the column, $key is a single field name
返回类型: void
Assigns a value to a particular column.
next_row([$type = 'object'])
参数:
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: Next row of result set, or NULL if it doesn't exist
返回类型: mixed
Returns the next row from the result set.
previous_row([$type = 'object'])
参数:
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: Previous row of result set, or NULL if it doesn't exist
返回类型: mixed
Returns the previous row from the result set.
first_row([$type = 'object'])
参数:
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: First row of result set, or NULL if it doesn't exist
返回类型: mixed
Returns the first row from the result set.
last_row([$type = 'object'])
参数:
* **$type** (string) -- Type of the requested result - array, object, or class name
返回: Last row of result set, or NULL if it doesn't exist
返回类型: mixed
Returns the last row from the result set.
num_rows()
返回: Number of rows in the result set
返回类型: int
Returns the number of rows in the result set.
Usage: see [结果辅助方法](http://codeigniter.org.cn/user_guide/database/results.html#id4).
num_fields()
返回: Number of fields in the result set
返回类型: int
Returns the number of fields in the result set.
Usage: see [结果辅助方法](http://codeigniter.org.cn/user_guide/database/results.html#id4).
field_data()
返回: Array containing field meta-data
返回类型: array
Generates an array of stdClass objects containing field meta-data.
free_result()
返回类型: void
Frees a result set.
Usage: see [结果辅助方法](http://codeigniter.org.cn/user_guide/database/results.html#id4).
list_fields()
返回: Array of column names
返回类型: array
Returns an array containing the field names in the result set.
- 欢迎使用 CodeIgniter
- 安装说明
- 下载 CodeIgniter
- 安装说明
- 从老版本升级
- 疑难解答
- CodeIgniter 概览
- CodeIgniter 将从这里开始
- CodeIgniter 是什么?
- 支持特性
- 应用程序流程图
- 模型-视图-控制器
- 设计与架构目标
- 教程 - 内容提要
- 加载静态内容
- 读取新闻条目
- 创建新闻条目
- 结束语
- 常规主题
- CodeIgniter URL
- 控制器
- 保留名称
- 视图
- 模型
- 辅助函数
- 使用 CodeIgniter 类库
- 创建类库
- 使用 CodeIgniter 驱动器
- 创建驱动器
- 创建核心系统类
- 创建附属类
- 钩子 - 扩展框架核心
- 自动加载资源
- 公共函数
- 兼容性函数
- URI 路由
- 错误处理
- 网页缓存
- 程序分析
- 以 CLI 方式运行
- 管理你的应用程序
- 处理多环境
- 在视图文件中使用 PHP 替代语法
- 安全
- PHP 开发规范
- 类库参考
- 基准测试类
- 缓存驱动器
- 日历类
- 购物车类
- 配置类
- Email 类
- 加密类
- 加密类(新版)
- 文件上传类
- 表单验证类
- FTP 类
- 图像处理类
- 输入类
- Javascript 类
- 语言类
- 加载器类
- 迁移类
- 输出类
- 分页类
- 模板解析类
- 安全类
- Session 类
- HTML 表格类
- 引用通告类
- 排版类
- 单元测试类
- URI 类
- 用户代理类
- XML-RPC 与 XML-RPC 服务器类
- Zip 编码类
- 数据库参考
- 数据库快速入门: 示例代码
- 数据库配置
- 连接你的数据库
- 查询
- 生成查询结果
- 查询辅助函数
- 查询构造器类
- 事务
- 数据库元数据
- 自定义函数调用
- 数据库缓存类
- 数据库工厂类
- 数据库工具类
- 数据库驱动器参考
- 辅助函数参考
- 数组辅助函数
- 验证码辅助函数
- Cookie 辅助函数
- 日期辅助函数
- 目录辅助函数
- 下载辅助函数
- 邮件辅助函数
- 文件辅助函数
- 表单辅助函数
- HTML 辅助函数
- 语言辅助函数
- Inflector 辅助函数
- 数字辅助函数
- 路径辅助函数
- 安全辅助函数
- 表情辅助函数
- 字符串辅助函数
- 文本辅助函数
- 排版辅助函数
- URL 辅助函数
- XML 辅助函数
- 向 CodeIgniter 贡献你的力量