在线文档教程
Codeigniter 3

生成查询结果 | 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)参数:$ nint) - 要返回的结果行的索引$ 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'])参数:$ typestring) - 请求结果的类型 - 数组,对象或类nameReturns:结果集的上一行,如果不存在则返回NULL返回类型:混合

  • $ typestring) - 请求结果的类型 - 数组,对象或类名

返回:结果集的上一行,如果不存在则返回NULL

Return type: mixed

返回结果集中的前一行。

first_row([$type = 'object'])

参数:$ type(string) - 请求结果的类型 - 数组,对象或类名
返回:结果集的第一行,如果不存在则为NULL
返回类型:

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

  • $ typestring) - 请求结果的类型 - 数组,对象或类名

返回:结果集的最后一行,如果不存在,则返回NULL

Return type: mixed

返回结果集中的最后一行。

num_rows()

返回:结果集中的行数
返回类型:INT

num_fields()

返回:结果集中的字段数
返回类型:INT

field_data()

返回:包含字段元数据的数组
返回类型:排列

free_result()

Return type:void

list_fields()

返回:列名称数组
返回类型:排列