# CodeIgniter 用户指南 版本 2.2.0

编辑文档、查看近期更改请 登录 或 注册 找回密码

搜索用户指南

查看原文

# 生成查询记录集

支持使用以下方法生成记录集

## result()

该方法执行成功返回一个对象数组，失败则返回一个空数组。 一般情况下，我们使用下面的方法遍历结果，代码就像这样：

`$query = $this->db->query("要执行的 SQL");
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}`

本函数的别名是 result_object()。

如果当前所执行的 SQL 可能不会返回记录集，我们可以使用如下方法进行判断：

`$query = $this->db->query("要执行的 SQL");
if ($query->num_rows() > 0)
{
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
}`

你可以传递一个字符串给result()函数，该字符串代表着某个类为每一个result对象进行实例化 （注意：该类必须已经被加载）。

`$query = $this->db->query("SELECT * FROM users;");
foreach ($query->result('User') as $row)
{
echo $row->name; // call attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
}`

## result_array()

该方法执行成功时将记录集作为关联数组返回。失败时返回空数组。一般情况下，我们使用下面的方法遍历结果，代码就像这样：

`$query = $this->db->query("要执行的 SQL");
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}`

## row()

该函数将当前请求的第一行数据作为 object 返回。这里是示例代码：

`$query = $this->db->query("要执行的 SQL");
if ($query->num_rows() > 0)
{
$row = $query->row();
echo $row->title;
echo $row->name;
echo $row->body;
}`

你可以传递参数(参数是行的索引)以便获得某一行的数据。比如我们要获得第 5 行的数据：

`$row = $query->row(4);`

如果传入的参数超出行索引，则返回第一行(索引为0)数据

你也可以添加一个字符串参数，它是一个类在row()函数下实例化的名字：

`$query = $this->db->query("SELECT * FROM users LIMIT 1;");
$query->row(0, 'User')
echo $row->name; // call attributes
echo $row->reverse_name(); // or methods defined on the 'User' class
`

## row_array()

功能与 row() 一样, 区别在于该函数返回的是一个数组：

`$query = $this->db->query("要执行的 SQL");
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['body'];
}`

你可以传递参数(参数是行的索引)以便获得某一行的数据。比如我们要获得第 5 行的数据：

`$row = $query->row_array(4);`

如果传入的参数超出行索引，则返回第一行(索引为0)数据

除此以外, 我们还可以使用下面的方法通过游标的方式获取记录：

$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()

默认情况下他们将返回一个 object，同时你也可以传递参数 "array" 以便使用 array 的方式获取数据

$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')

# 结果集辅助函数

## $query->num_rows()

该函数将会返回当前请求的行数。在本例子中, $query 表示当前 SQL 所产生的请求结果对象：

`$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_rows();`

## $query->num_fields()

该函数返回当前请求的字段数（列数）：

`$query = $this->db->query('SELECT * FROM my_table');
echo $query->num_fields();`

## $query->free_result()

该函数将会释放当前查询所占用的内存并删除其关联的资源标识。通常来说，PHP 将会脚本执行结束后自动释放内存。如果当前执行的请求将要花很长时间并且占用比较大的资源时,该函数可以在一定程度上降低资源的消耗：

`$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // $query 将不再可用
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // $query2 将不再可用`

翻译贡献者: Hex, kakera, lishen2, loiynet, wangjunjie871111
最后修改: 2012-10-25 16:51:16