非常教程

Codeigniter 3参考手册

数据库 | Database

生成查询结果 | Generating Query Results

有几种方法可以生成查询结果:

  • 结果数组
  • 结果行
  • 自定义结果对象
  • 结果帮助法
  • 类引用

结果数组

结果()

方法将查询结果作为对象,或空数组在失败的时候。通常,您将在foreach循环中使用此方法,如下所示:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result() as $row)
{
        echo $row->title;
        echo $row->name;
        echo $row->body;
}

上面的方法是result_object()...

您还可以传递一个字符串,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'];
}

结果行

行()

此方法返回单个结果行。如果查询有多行,则只返回第一行。结果作为对象这里有一个用法示例:

$query = $this->db->query("YOUR QUERY");

$row = $query->row();

if (isset($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");

$row = $query->row_array();

if (isset($row))
{
        echo $row['title'];
        echo $row['name'];
        echo $row['body'];
}

如果希望返回特定行,可以在第一个参数中以数字形式提交行号:

$row = $query->row_array(5);

另外,您可以使用以下变体,通过结果前进/后退/前进/后退:

默认情况下,它们返回一个对象,除非您在参数中添加单词“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

自定义结果对象

可以将结果作为自定义类的实例而不是stdClass或数组,如result()result_array()方法允许。这要求类已经加载到内存中。对象将将从数据库返回的所有值设置为属性。如果已经声明了这些信息,并且是非公共的,那么您应该提供一个__set()方法以允许设置它们。

例子:

class User {

        public $id;
        public $email;
        public $username;

        protected $last_login;

        public function last_login($format)
        {
                return $this->last_login->format($format);
        }

        public function __set($name, $value)
        {
                if ($name === 'last_login')
                {
                        $this->last_login = DateTime::createFromFormat('U', $value);
                }
        }

        public function __get($name)
        {
                if (isset($this->$name))
                {
                        return $this->$name;
                }
        }
}

除了下面列出的两个方法之外,下列方法还可以以类名返回结果:first_row(),,,last_row(),,,next_row(),和previous_row()...

custom_result_object()

将整个结果集作为请求类的实例数组返回。唯一的参数是要实例化的类的名称。

例子:

$query = $this->db->query("YOUR QUERY");

$rows = $query->custom_result_object('User');

foreach ($rows as $row)
{
        echo $row->id;
        echo $row->email;
        echo $row->last_login('Y-m-d');
}

custom_row_object()

从查询结果中返回一行。第一个参数是结果的行号。第二个参数是要实例化的类名。

例子:

$query = $this->db->query("YOUR QUERY");

$row = $query->custom_row_object(0, 'User');

if (isset($row))
{
        echo $row->email;   // access attributes
        echo $row->last_login('Y-m-d');   // access class methods
}

您还可以使用row()方法完全相同。

例子:

$row = $query->custom_row_object(0, 'User');

结果助手方法

NUM_ROWS()

查询返回的行数。注意:在本例中,$query是指定查询结果对象的变量:

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

echo $query->num_rows();

并非所有数据库驱动程序都有获取结果集总行数的原生方法。在这种情况下,所有数据都会被预取,并且count()对结果数组进行手动调用,以获得相同的结果。

NUM_FIELDS()

查询返回的FIELDS(列)的数量。确保使用查询结果对象调用该方法:

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

echo $query->num_fields();

free_result()

它释放与结果关联的内存,并删除结果资源ID。通常,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。

类引用

class CI_DB_resultresult([$type = 'object'])

参数:

$ type(string) - 请求结果的类型 - 数组,对象或类名

返回:

包含提取的行的数组

返回类型:

排列

  • $ typestring) - 所请求结果的类型 - 数组,对象或类名返回:包含获取行的数组返回类型:数组包和result_array()result_object()custom_result_object()方法。用法:查看结果数组。result_array()返回:包含提取的rows的数组result_object()返回类型:数组返回:包含提取的rows的数组返回类型:数组custom_result_object($class_name)参数:$ class_name(string) - 结果的类名rowsReturns:包含提取的行的数组返回类型:数组
  • $ class_namestring) - 结果行的类名
返回:包含提取的行的数组
返回类型:数组
以行数组形式返回查询结果,其中每行都是指定类的实例。

row([$n = 0[, $type = 'object']])

参数:

$ n(int) - 要返回的查询结果行的索引$ type(string) - 请求结果的类型 - 数组,对象或类名

返回:

请求的行或NULL,如果它不存在

返回类型:

  • $ nint) - 要返回的查询结果行的索引
  • $ typestring) - 请求结果的类型 - 数组,对象或类名
返回:请求的行,如果不存在,则返回NULL
Return type:  mixed
A wrapper for the `row_array()`, `row_object() and ``custom_row_object()` methods.

用法:见结果行...

unbuffered_row([$type = 'object'])

参数:

$ type(string) - 请求结果的类型 - 数组,对象或类名

返回:

结果集中的下一行,如果不存在则为NULL

返回类型:

  • $ typestring) - 请求的结果的类型 - 数组,对象或类名返回:结果集中的下一行或者NULL(如果不存在)返回类型:混合获取下一个结果行并将其返回到请求中形成。用法:查看结果行。row_array([$n = 0])参数:$ n(int) - 要返回的查询结果行的索引返回:请求的行或NULL,如果它不存在返回类型:数组
  • $ nint) - 要返回的查询结果行的索引
返回:请求的行,如果不存在,则返回NULL
返回类型:数组
以关联数组形式返回请求的结果行。

用法:见结果行...

row_object([$n = 0])

参数:

$ n(int) - 要返回的查询结果行的索引

返回:

请求的行或NULL,如果它不存在

返回类型:

stdClass的

  • $ nint) - 要返回的查询结果行的索引返回:请求的行,如果不存在,则返回NULL返回类型:stdClass将请求的结果行作为类型对象返回stdClass。用法:查看结果行。custom_row_object($n, $type)参数:$ n(int) - 要返回的结果行的索引$ class_name(字符串) - 结果行的类名rowReturns:所请求的行或NULL,如果不存在返回类型:$ type
  • $ nint) - 要返回的结果行的索引
  • $ class_namestring) - 结果行的类名称
返回:请求的行,如果不存在,则返回NULL
返回类型:$ type
将请求的结果行作为请求的类的实例返回。

data_seek([$n = 0])

参数:

$ n(int) - 接下来要返回的结果行的索引

返回:

成功为TRUE,失败为FALSE

返回类型:

布尔

  • $ nint) - 下一个要返回的结果行的索引返回:成功时为TRUE,失败时为FALSE返回类型:bool将内部结果行指针移动到所需偏移量。用法:请参阅结果助手方法。set_row($key[, $value = NULL])参数:$ key(mixed) - 列名或键/值对的数组$ value(mixed) - 要分配给列的值,$ key是单个字段名称返回类型:void
  • $ keymixed) - 列名或键/值对的数组
  • $ valuemixed) - 要分配给列的值,$ key是单个字段名称
Return type:  void
将值分配给特定的列。

next_row([$type = 'object'])

参数:

$ type(string) - 请求结果的类型 - 数组,对象或类名

返回:

结果集的下一行,如果不存在,则为NULL

返回类型:

  • $ typestring) - 请求结果的类型 - 数组,对象或类名返回:结果集的下一行;如果不存在,则返回NULL返回类型:混合返回结果集中的下一行。previous_row([$type = 'object'])参数:$ type(string) - 请求结果的类型 - 数组,对象或类nameReturns:结果集的上一行,如果不存在则返回NULL返回类型:混合
  • $ typestring) - 请求结果的类型 - 数组,对象或类名
返回:结果集的上一行,如果不存在则返回NULL
Return type:  mixed
返回结果集中的前一行。

first_row([$type = 'object'])

参数:

$ type(string) - 请求结果的类型 - 数组,对象或类名

返回:

结果集的第一行,如果不存在则为NULL

返回类型:

  • $ typestring) - 请求结果的类型 - 数组,对象或类名返回:结果集的第一行,如果不存在,则返回NULL返回类型:混合返回结果集中的第一行。last_row([$type = 'object'])参数:$ type(string) - 请求结果的类型 - 数组,对象或类nameReturns:结果集的最后一行,如果不存在则返回NULL返回类型:混合
  • $ typestring) - 请求结果的类型 - 数组,对象或类名
返回:结果集的最后一行,如果不存在,则返回NULL
Return type:  mixed
返回结果集中的最后一行。

num_rows()

返回:

结果集中的行数

返回类型:

INT

num_fields()

返回:

结果集中的字段数

返回类型:

INT

field_data()

返回:

包含字段元数据的数组

返回类型:

排列

free_result()

Return type:

void

list_fields()

返回:

列名称数组

返回类型:

排列

Codeigniter 3

CodeIgniter 是一个PHP MVC框架,特点是超轻量级、有数据加密、有灵活URI路由等。对于 PHP 程序员来说,它小巧但功能强大。

主页 https://codeigniter.com/
源码 https://github.com/bcit-ci/CodeIgniter
版本 3
发布版本 3.1.5