該方法執行成功返回一個對象數組,失敗則返回一個空數組。 一般情況下,我們使用下面的方法遍歷結果,代碼就像這樣:
$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 將不再可用