directory search
Array Array Helper Benchmarking Benchmarking Class Caching Caching Driver Calendaring Calendaring Class CAPTCHA CAPTCHA Helper Config Config Class Cookie Cookie Helper Database Connecting to your Database Custom Function Calls Database Caching Class Database Configuration Database Forge Class Database Metadata Database Quick Start: Example Code Database Reference Database Utility Class DB Driver Reference Generating Query Results Queries Query Builder Class Query Helper Methods Transactions Date Date Helper Directory Directory Helper Download Download Helper Email Email Class Email Helper Encrypt Encrypt Class Encryption Encryption Library File File Helper File Uploading File Uploading Class Form Form Helper Form Validation Form Validation FTP FTP Class Functions compatibility_functions common_functions HTML HTML Helper HTML Table HTML Table Class Image Manipulation Image Manipulation Class Inflector Inflector Helper Input Input Class Javascript Javascript Class Language Language Class Language Helper Loader Loader Class Migrations Migrations Class Number Number Helper Output Output Class Pagination Pagination Class Path Path Helper Security Security Class Security Helper Session Session Library Shopping Cart Shopping Cart Class Smiley Smiley Helper String String Helper Template Parser Template Parser Class Text Text Helper Trackback Trackback Class Typography Typography Class Typography Helper Unit Testing Unit Testing Class URI URL User Agent XML XML-RPC and XML-RPC Server Zip Encoding Zip Encoding Class XML-RPC and XML-RPC Server Classes XML Helper User Agent Class URL Helper URI Class
characters

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

  • 结果数组

  • 结果行

  • 自定义结果对象

  • 结果帮助法

  • 类引用

结果数组

结果()

方法将查询结果作为对象,或空数组在失败的时候。通常,您将在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 attributesecho 
$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()

返回:

列名称数组

返回类型:

排列

Previous article: Next article: