CodeIgniter 生成查詢結(jié)果

2018-07-21 15:41 更新

生成查詢結(jié)果

有幾種不同方法可以生成查詢結(jié)果:

結(jié)果數(shù)組

result() 方法

該方法以對(duì)象數(shù)組形式返回查詢結(jié)果,如果查詢失敗返回空數(shù)組。 一般情況下,你會(huì)像下面這樣在一個(gè) foreach 循環(huán)中使用它:

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

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

該方法是 result_object() 方法的別名。

如果你的查詢可能會(huì)沒有結(jié)果,推薦在處理結(jié)果之前,先使用方法 num_rows() 檢驗(yàn)一下:

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

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

你還可以傳一個(gè)字符串參數(shù)給 result() 方法,這個(gè)字符串參數(shù)代表 你想要把每個(gè)結(jié)果轉(zhuǎn)換成某個(gè)類的類名(這個(gè)類必須已經(jīng)加載)

$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() 方法

這個(gè)方法以一個(gè)純粹的數(shù)組形式返回查詢結(jié)果,如果無結(jié)果,則返回一個(gè)空數(shù)組。 一般情況下,你會(huì)像下面這樣在一個(gè) foreach 循環(huán)中使用它:

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

foreach ($query->result_array() as $row)
{
    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

結(jié)果行

row() 方法

這個(gè)方法返回單獨(dú)一行結(jié)果。如果你的查詢不止一行結(jié)果,它只返回第一行。 返回的結(jié)果是對(duì)象形式,這里是用例:

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

if ($query->num_rows() > 0)
{
    $row = $query->row();

    echo $row->title;
    echo $row->name;
    echo $row->body;
}

如果你要返回特定行的數(shù)據(jù),你可以將行號(hào)作為第一個(gè)參數(shù)傳給這個(gè)方法:

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

你還可以加上第二個(gè)參數(shù),該參數(shù)為字符串類型,代表你想要把結(jié)果轉(zhuǎn)換成某個(gè)類的類名:

$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() 方法

這個(gè)方法除了返回結(jié)果是一個(gè)數(shù)組而不是一個(gè)對(duì)象之外,其他的和上面的 row() 方法完全一樣。 舉例:

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

if ($query->num_rows() > 0)
{
    $row = $query->row_array();

    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

如果你要返回特定行的數(shù)據(jù),你可以將行號(hào)作為第一個(gè)參數(shù)傳給這個(gè)方法:

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

另外,你可以使用下面這些方法從你的結(jié)果集中獲取前一個(gè)、后一個(gè)、 第一個(gè)或者最后一個(gè)結(jié)果:

$row = $query->first_row()

$row = $query->last_row()

$row = $query->next_row()

$row = $query->previous_row()

這些方法默認(rèn)返回對(duì)象,如果需要返回?cái)?shù)組形式,將單詞 "array" 作為參數(shù)傳入方法即可:

$row = $query->first_row('array')

$row = $query->last_row('array')

$row = $query->next_row('array')

$row = $query->previous_row('array')

注解

上面所有的這些方法都會(huì)把所有的結(jié)果加載到內(nèi)存里(預(yù)讀取), 當(dāng)處理大結(jié)果集時(shí)最好使用 unbuffered_row() 方法。

unbuffered_row() 方法

這個(gè)方法和 row() 方法一樣返回單獨(dú)一行結(jié)果,但是它不會(huì)預(yù)讀取所有的結(jié)果數(shù)據(jù)到內(nèi)存中。 如果你的查詢結(jié)果不止一行,它將返回當(dāng)前一行,并通過內(nèi)部實(shí)現(xiàn)的指針來移動(dòng)到下一行。

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

while ($row = $query->unbuffered_row())
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

為了指定返回值的類型,可以傳一個(gè)字符串參數(shù) 'object'(默認(rèn)值) 或者 'array' 給這個(gè)方法:

$query->unbuffered_row();       // object
$query->unbuffered_row('object');   // object
$query->unbuffered_row('array');    // associative array

結(jié)果輔助方法

num_rows() 方法

該方法返回查詢結(jié)果的行數(shù)。注意:在這個(gè)例子中,$query 變量為查詢結(jié)果對(duì)象:

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

echo $query->num_rows();

注解

并不是所有的數(shù)據(jù)庫(kù)驅(qū)動(dòng)器都有原生的方法來獲取查詢結(jié)果的總行數(shù)。 當(dāng)遇到這種情況時(shí),所有的數(shù)據(jù)會(huì)被預(yù)讀取到內(nèi)存中,并調(diào)用 count() 函數(shù) 來取得總行數(shù)。

num_fields() 方法

該方法返回查詢結(jié)果的字段數(shù)(列數(shù))。在你的查詢結(jié)果對(duì)象上調(diào)用該方法:

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

echo $query->num_fields();

free_result() 方法

該方法釋放掉查詢結(jié)果所占的內(nèi)存,并刪除結(jié)果的資源標(biāo)識(shí)。通常來說, PHP 會(huì)在腳本執(zhí)行結(jié)束后自動(dòng)釋放內(nèi)存。但是,如果你在某個(gè)腳本中執(zhí)行大量的查詢, 你可能需要在每次查詢之后釋放掉查詢結(jié)果,以此來降低內(nèi)存消耗。

舉例:

$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() 方法

這個(gè)方法用來設(shè)置下一個(gè)結(jié)果行的內(nèi)部指針,它只有在和 unbuffered_row() 方法一起使用才有效果。

它接受一個(gè)正整數(shù)參數(shù)(默認(rèn)值為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();

注解

并不是所有的數(shù)據(jù)庫(kù)驅(qū)動(dòng)器都支持這一特性,調(diào)用這個(gè)方法將會(huì)返回 FALSE, 譬如你無法在 PDO 上使用它。

類參考

classCI_DB_result

result([$type = 'object'])

參數(shù):

  • $type (string) -- Type of requested results - array, object, or class name

返回: Array containing the fetched rows

返回類型: array

A wrapper for the result_array(), result_object() and custom_result_object() methods.

Usage: see 結(jié)果數(shù)組.

result_array()

返回: Array containing the fetched rows
返回類型: array

Returns the query results as an array of rows, where each row is itself an associative array.

Usage: see 結(jié)果數(shù)組.

result_object()

返回: Array containing the fetched rows
返回類型: array

Returns the query results as an array of rows, where each row is an object of type stdClass.

Usage: see 結(jié)果數(shù)組.

custom_result_object($class_name)

參數(shù):

  • $class_name (string) -- Class name for the resulting rows

返回: Array containing the fetched rows

返回類型: array

Returns the query results as an array of rows, where each row is an instance of the specified class.

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

參數(shù):

  • $n (int) -- Index of the query results row to be returned
  • $type (string) -- Type of the requested result - array, object, or class name

返回: The requested row or NULL if it doesn't exist

返回類型: mixed

A wrapper for the row_array(), row_object() and ``custom_row_object() methods.

Usage: see 結(jié)果行.

unbuffered_row([$type = 'object'])

參數(shù):

  • $type (string) -- Type of the requested result - array, object, or class name

返回: Next row from the result set or NULL if it doesn't exist

返回類型: mixed

Fetches the next result row and returns it in the requested form.

Usage: see 結(jié)果行.

row_array([$n = 0])

參數(shù):

  • $n (int) -- Index of the query results row to be returned

返回: The requested row or NULL if it doesn't exist

返回類型: array

Returns the requested result row as an associative array.

Usage: see 結(jié)果行.

row_object([$n = 0])

參數(shù):

  • $n (int) -- Index of the query results row to be returned :returns: The requested row or NULL if it doesn't exist

返回類型: stdClass

Returns the requested result row as an object of type stdClass.

Usage: see 結(jié)果行.

custom_row_object($n, $type)

參數(shù):

  • $n (int) -- Index of the results row to return
  • $class_name (string) -- Class name for the resulting row

返回: The requested row or NULL if it doesn't exist

返回類型: $type

Returns the requested result row as an instance of the requested class.

data_seek([$n = 0])

參數(shù):

  • $n (int) -- Index of the results row to be returned next

返回: TRUE on success, FALSE on failure

返回類型: bool

Moves the internal results row pointer to the desired offset.

Usage: see 結(jié)果輔助方法.

set_row($key[, $value = NULL])

參數(shù):

  • $key (mixed) -- Column name or array of key/value pairs
  • $value (mixed) -- Value to assign to the column, $key is a single field name

返回類型: void

Assigns a value to a particular column.

next_row([$type = 'object'])

參數(shù):

  • $type (string) -- Type of the requested result - array, object, or class name

返回: Next row of result set, or NULL if it doesn't exist

返回類型: mixed

Returns the next row from the result set.

previous_row([$type = 'object'])

參數(shù):

  • $type (string) -- Type of the requested result - array, object, or class name

返回: Previous row of result set, or NULL if it doesn't exist

返回類型: mixed

Returns the previous row from the result set.

first_row([$type = 'object'])

參數(shù):

  • $type (string) -- Type of the requested result - array, object, or class name

返回: First row of result set, or NULL if it doesn't exist

返回類型: mixed

Returns the first row from the result set.

last_row([$type = 'object'])

參數(shù):

  • $type (string) -- Type of the requested result - array, object, or class name

返回: Last row of result set, or NULL if it doesn't exist

返回類型: mixed

Returns the last row from the result set.

num_rows()

返回: Number of rows in the result set
返回類型: int

Returns the number of rows in the result set.

Usage: see 結(jié)果輔助方法.

num_fields()

返回: Number of fields in the result set
返回類型: int

Returns the number of fields in the result set.

Usage: see 結(jié)果輔助方法.

field_data()

返回: Array containing field meta-data
返回類型: array

Generates an array of stdClass objects containing field meta-data.

free_result()

返回類型: void

Frees a result set.

Usage: see 結(jié)果輔助方法.

list_fields()

返回: Array of column names
返回類型: array

Returns an array containing the field names in the result set.

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)