生成查询结果 | 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) - 请求结果的类型 - 数组,对象或类名 |
---|---|
返回: | 包含提取的行的数组 |
返回类型: | 排列 |
$ type
(string
) - 所请求结果的类型 - 数组,对象或类名返回:包含获取行的数组返回类型:数组包和result_array()
,result_object()
和custom_result_object()
方法。用法:查看结果数组。result_array()
返回:包含提取的rows的数组result_object()
返回类型:数组返回:包含提取的rows的数组返回类型:数组custom_result_object($class_name)
参数:$ class_name(string
) - 结果的类名rowsReturns:包含提取的行的数组返回类型:数组
$ class_name
(string
) - 结果行的类名
返回:包含提取的行的数组
返回类型:数组
以行数组形式返回查询结果,其中每行都是指定类的实例。
row([$n = 0[, $type = 'object']])
参数: | $ n(int) - 要返回的查询结果行的索引$ type(string) - 请求结果的类型 - 数组,对象或类名 |
---|---|
返回: | 请求的行或NULL,如果它不存在 |
返回类型: | 杂 |
$ n
(int
) - 要返回的查询结果行的索引
$ type
(string
) - 请求结果的类型 - 数组,对象或类名
返回:请求的行,如果不存在,则返回NULL
Return type: mixed
A wrapper for the `row_array()`, `row_object() and ``custom_row_object()` methods.
用法:见结果行...
unbuffered_row([$type = 'object'])
参数: | $ type(string) - 请求结果的类型 - 数组,对象或类名 |
---|---|
返回: | 结果集中的下一行,如果不存在则为NULL |
返回类型: | 杂 |
$ type
(string
) - 请求的结果的类型 - 数组,对象或类名返回:结果集中的下一行或者NULL(如果不存在)返回类型:混合获取下一个结果行并将其返回到请求中形成。用法:查看结果行。row_array([$n = 0])
参数:$ n(int) - 要返回的查询结果行的索引返回:请求的行或NULL,如果它不存在返回类型:数组
$ n
(int
) - 要返回的查询结果行的索引
返回:请求的行,如果不存在,则返回NULL
返回类型:数组
以关联数组形式返回请求的结果行。
用法:见结果行...
row_object([$n = 0])
参数: | $ n(int) - 要返回的查询结果行的索引 |
---|---|
返回: | 请求的行或NULL,如果它不存在 |
返回类型: | stdClass的 |
$ n
(int
) - 要返回的查询结果行的索引返回:请求的行,如果不存在,则返回NULL返回类型:stdClass
将请求的结果行作为类型对象返回stdClass
。用法:查看结果行。custom_row_object($n, $type)
参数:$ n
(int
) - 要返回的结果行的索引$ class_name(字符串) - 结果行的类名rowReturns:所请求的行或NULL,如果不存在返回类型:$ type
$ n
(int
) - 要返回的结果行的索引
$ class_name
(string
) - 结果行的类名称
返回:请求的行,如果不存在,则返回NULL
返回类型:$ type
将请求的结果行作为请求的类的实例返回。
data_seek([$n = 0])
参数: | $ n(int) - 接下来要返回的结果行的索引 |
---|---|
返回: | 成功为TRUE,失败为FALSE |
返回类型: | 布尔 |
$ n
(int
) - 下一个要返回的结果行的索引返回:成功时为TRUE,失败时为FALSE返回类型:bool将内部结果行指针移动到所需偏移量。用法:请参阅结果助手方法。set_row($key[, $value = NULL])
参数:$ key(mixed) - 列名或键/值对的数组$ value(mixed) - 要分配给列的值,$ key是单个字段名称返回类型:void
$ key
(mixed
) - 列名或键/值对的数组
$ value
(mixed
) - 要分配给列的值,$ key是单个字段名称
Return type: void
将值分配给特定的列。
next_row([$type = 'object'])
参数: | $ type(string) - 请求结果的类型 - 数组,对象或类名 |
---|---|
返回: | 结果集的下一行,如果不存在,则为NULL |
返回类型: | 杂 |
$ type
(string
) - 请求结果的类型 - 数组,对象或类名返回:结果集的下一行;如果不存在,则返回NULL返回类型:混合返回结果集中的下一行。previous_row([$type = 'object'])
参数:$ type
(string
) - 请求结果的类型 - 数组,对象或类nameReturns:结果集的上一行,如果不存在则返回NULL返回类型:混合
$ type
(string
) - 请求结果的类型 - 数组,对象或类名
返回:结果集的上一行,如果不存在则返回NULL
Return type: mixed
返回结果集中的前一行。
first_row([$type = 'object'])
参数: | $ type(string) - 请求结果的类型 - 数组,对象或类名 |
---|---|
返回: | 结果集的第一行,如果不存在则为NULL |
返回类型: | 杂 |
$ type
(string
) - 请求结果的类型 - 数组,对象或类名返回:结果集的第一行,如果不存在,则返回NULL返回类型:混合返回结果集中的第一行。last_row([$type = 'object'])
参数:$ type
(string
) - 请求结果的类型 - 数组,对象或类nameReturns:结果集的最后一行,如果不存在则返回NULL返回类型:混合
$ type
(string
) - 请求结果的类型 - 数组,对象或类名
返回:结果集的最后一行,如果不存在,则返回NULL
Return type: mixed
返回结果集中的最后一行。
num_rows()
返回: | 结果集中的行数 |
---|---|
返回类型: | INT |
num_fields()
返回: | 结果集中的字段数 |
---|---|
返回类型: | INT |
field_data()
返回: | 包含字段元数据的数组 |
---|---|
返回类型: | 排列 |
free_result()
Return type: | void |
---|
list_fields()
返回: | 列名称数组 |
---|---|
返回类型: | 排列 |