CodeIgniter4 生成查詢結(jié)果

2020-08-17 16:12 更新

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

getResult()

這個(gè)方法返回 對象數(shù)組 類型的查詢結(jié)果,或在失敗時(shí)返回 一個(gè)空數(shù)組 。 典型的用法是使用 foreach 循環(huán),像這樣:

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


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

上面的方法是 getResultObject() 的別名。

如果你想返回一個(gè)二維數(shù)組,可以給第一個(gè)參數(shù)傳字符串 ‘a(chǎn)rray’

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


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

上面的方法是 getResultArray() 的別名。

你也可以傳字符串參數(shù)到 getResult() 方法,表示要為每個(gè)結(jié)果對象實(shí)例化的類

$query = $db->query("SELECT * FROM users;");


foreach ($query->getResult('User') as $user)
{
    echo $user->name; // 獲取屬性
    echo $user->reverseName(); // 或訪問 'User' 類定義的方法
}

上面的方法是 getCustomResultObject() 的別名。

getResultArray()

這個(gè)方法返回一個(gè)純數(shù)組的查詢結(jié)果,查無結(jié)果時(shí)為空數(shù)組。 典型的用法是使用 foreach 循環(huán),像這樣:

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


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

單行結(jié)果

getRow()

這個(gè)方法返回一個(gè)單行結(jié)果,如果你的查詢有多行結(jié)果,它僅返回第一條。 返回結(jié)果是一個(gè) 對象 。使用示例:

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


$row = $query->getRow();


if (isset($row))
{
    echo $row->title;
    echo $row->name;
    echo $row->body;
}

如果你想返回指定行的結(jié)果,可以在第一個(gè)參數(shù)里提供這個(gè)數(shù)字:

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

你也可以傳一個(gè)字符串到第二個(gè)參數(shù),表示該結(jié)果實(shí)例化的對象類:

$query = $db->query("SELECT * FROM users LIMIT 1;");
$row = $query->getRow(0, 'User');


echo $row->name; // 獲取屬性
echo $row->reverse_name(); // 或訪問 'User' 類定義的方法

getRowArray()

這個(gè)與上面的 row() 方法基本相同,區(qū)別是它返回的是一個(gè)數(shù)組。 示例:

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


$row = $query->getRowArray();


if (isset($row))
{
    echo $row['title'];
    echo $row['name'];
    echo $row['body'];
}

如果你想返回指定行的結(jié)果,可以在第一個(gè)參數(shù)里提供這個(gè)數(shù)字:

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

另外,你可以用這些方法在結(jié)果集里做 前進(jìn)/后退/首行/尾行 的游標(biāo)操作:

$row = $query-&getFirstRow()

$row = $query-&getLastRow()

$row = $query-&getNextRow()

$row = $query-&getPreviousRow()

默認(rèn)他們返回一個(gè)對象,除非第一個(gè)參數(shù)是字符串 “array” 才會(huì)返回?cái)?shù)組:

$row = $query-&getFirstRow(‘a(chǎn)rray’)

$row = $query-&getLastRow(‘a(chǎn)rray’)

$row = $query-&getNextRow(‘a(chǎn)rray’)

$row = $query-&getPreviousRow(‘a(chǎn)rray’)

注解

以上所有方法都會(huì)把整個(gè)查詢結(jié)果載入內(nèi)存(預(yù)加載)。 請使用 getUnbufferedRow() 方法處理大型結(jié)果集。

getUnbufferedRow()

這個(gè)方法返回單個(gè)結(jié)果,不會(huì)像 row() 把整個(gè)結(jié)果預(yù)加載到內(nèi)存里。 如果你的查詢結(jié)果多于一個(gè),它返回當(dāng)前行并將內(nèi)部數(shù)據(jù)指針向前移動(dòng)。

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


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

你可以選擇性的傳參 ‘object’ (默認(rèn)) 或 ‘a(chǎn)rray’ 來指定返回?cái)?shù)據(jù)的類型:

$query->getUnbufferedRow();         // 對象
$query->getUnbufferedRow('object'); // 對象
$query->getUnbufferedRow('array');  // 關(guān)聯(lián)數(shù)組

自定義結(jié)果對象

你可以用一個(gè)自定義的類實(shí)例作為返回結(jié)果,代替原來的 stdClass 對象或數(shù)組,

getResult()getResultArray() 允許如此操作。

如果該類(文件)尚未加載到內(nèi)存,自動(dòng)加載器會(huì)嘗試載入它。 對象的屬性值會(huì)設(shè)置為數(shù)據(jù)庫的返回?cái)?shù)據(jù),如果是非公開屬性, 你需要提供一個(gè) __set() 方法以允許他們被賦予值。

示例:

class User
{
        public $id;
        public $email;
        public $username;


        protected $last_login;


        public function lastLogin($format)
        {
                return $this->lastLogin->format($format);
        }


        public function __set($name, $value)
        {
                if ($name === 'lastLogin')
                {
                        $this->lastLogin = DateTime::createFromFormat('U', $value);
                }
        }


        public function __get($name)
        {
                if (isset($this->$name))
                {
                        return $this->$name;
                }
        }
}

除了下面列出的兩個(gè)方法之外,這些方法也可以指定類名 返回類實(shí)例的結(jié)果集: getFirstRow(), getLastRow(), getNextRow()getPreviousRow() 。

getCustomResultObject()

以要求的類實(shí)例數(shù)組的形式返回整個(gè)結(jié)果集。 唯一的參數(shù)是要實(shí)例化的類的名稱。

示例:

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


$rows = $query->getCustomResultObject('User');


foreach ($rows as $row)
{
        echo $row->id;
        echo $row->email;
        echo $row->last_login('Y-m-d');
}

getCustomRowObject()

以要求的類實(shí)例形式返回單個(gè)結(jié)果,第一個(gè)參數(shù)是它在結(jié)果集里的序號(hào), 第二個(gè)參數(shù)是要實(shí)例化的類的名稱。

示例:

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


$row = $query->getCustomRowObject(0, 'User');


if (isset($row))
{
        echo $row->email;                 // 獲取屬性
        echo $row->last_login('Y-m-d');   // 或訪問 'User' 類定義的方法
}

你也可以用 getRow() 方法達(dá)到相同效果。

示例:

$row = $query->getCustomRowObject(0, 'User');

結(jié)果處理輔助方法

getFieldCount()

返回查詢結(jié)果的字段個(gè)數(shù)(列數(shù)),確保你是使用查詢結(jié)果對象調(diào)用此方法:

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


echo $query->getFieldCount();

getFieldNames()

返回查詢結(jié)果的字段名(列名)的數(shù)組,確保你是使用查詢結(jié)果對象調(diào)用此方法:

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


    echo $query->getFieldNames();

freeResult()

它會(huì)釋放查詢結(jié)果占用的內(nèi)存并刪除資源ID。通常 PHP 會(huì)在腳本結(jié)束時(shí)自動(dòng)釋放內(nèi)存, 然而,如果你在某個(gè)腳本里執(zhí)行了很多查詢,你也許想處理完每個(gè)查詢后即刻釋放內(nèi)存, 以此減少內(nèi)存消耗。

舉例:

$query = $thisdb->query('SELECT title FROM my_table');


foreach ($query->getResult() as $row)
{
        echo $row->title;
}


$query->freeResult();  // $query 的結(jié)果對象不再可用


$query2 = $db->query('SELECT name FROM some_table');


$row = $query2->getRow();
echo $row->name;
$query2->freeResult(); // $query2 的結(jié)果對象不再可用

dataSeek()

該方法設(shè)置一個(gè)內(nèi)部指針,用來獲取下一個(gè)結(jié)果行,它僅和 getUnbufferedRow() 一起使用才有作用。

它接受一個(gè)正整數(shù)值,默認(rèn)是0,返回 TRUE 表示成功,F(xiàn)ALSE 表示失敗。

$query = $db->query('SELECT `field_name` FROM `table_name`');
$query->dataSeek(5); // Skip the first 5 rows
$row = $query->getUnbufferedRow();

注解

不是所有數(shù)據(jù)庫驅(qū)動(dòng)支持這個(gè)特性,(不支持的)會(huì)返回 FALSE。 最值得注意的是 - 你無法在 PDO 中使用它。

類庫參考

CodeIgniter\Database\BaseResult

getResult([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 包含查詢到的行的數(shù)組
返回類型: array

它是這幾種方法的包裝: getResultArray(), getResultObject()getCustomResultObject()

用法: 詳見 結(jié)果數(shù)組.

getResultArray()

返回: 包含查詢到的行的數(shù)組
返回類型: array

返回查詢結(jié)果行的數(shù)組,每行都是關(guān)聯(lián)數(shù)組。

用法: 詳見 結(jié)果數(shù)組.

getResultObject()

返回: 包含查詢到的行的數(shù)組
返回類型: array

返回查詢結(jié)果行的數(shù)組,每行都是 stdClass 類的實(shí)例。

用法: 詳見 結(jié)果數(shù)組.

getCustomResultObject($class_name)

參數(shù): $class_name (string) – 結(jié)果行的類實(shí)例名
返回: 包含查詢到的行的數(shù)組
返回類型: array

返回查詢結(jié)果行的數(shù)組,每行都是指定類的實(shí)例。

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

參數(shù): $n (int) – 想要返回的結(jié)果行的序號(hào)
$type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 要求的行數(shù)據(jù),不存在時(shí)返回 NULL
返回類型: mixed

它是這幾種方法的包裝: getRowArray(), getRowObject()getCustomRowObject()

用法: 詳見 單行結(jié)果.

getUnbufferedRow([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 結(jié)果集的下一行,不存在時(shí)返回 NULL
返回類型: mixed

按要求的格式返回結(jié)果集的下一行。

用法: 詳見 單行結(jié)果.

getRowArray([$n = 0])

參數(shù): $n (int) – 想要返回的結(jié)果行的序號(hào)
返回: 要求的行數(shù)據(jù),不存在時(shí)返回 NULL
返回類型: array

返回結(jié)果行,格式為關(guān)聯(lián)數(shù)組。

用法: 詳見 單行結(jié)果.

getRowObject([$n = 0])

參數(shù): $n (int) – 想要返回的結(jié)果行的序號(hào)
返回: 要求的行數(shù)據(jù),不存在時(shí)返回 NULL
返回類型: stdClass

返回結(jié)果行,格式為 stdClass 的類實(shí)例。

用法: 詳見 單行結(jié)果.

getCustomRowObject($n, $type)

參數(shù): $n (int) – 想要返回的結(jié)果行的序號(hào)
$class_name (string) – 結(jié)果行的類實(shí)例名
返回: 要求的行數(shù)據(jù),不存在時(shí)返回 NULL
返回類型: $type

返回結(jié)果行,格式為要求的的類實(shí)例。

dataSeek([$n = 0])

參數(shù): $n (int) – 即將返回的結(jié)果行的序號(hào)
返回: TRUE 表示成功,F(xiàn)ALSE 表示失敗
返回類型: bool

移動(dòng)結(jié)果集的內(nèi)部指針到指定位置。

用法: 詳見 結(jié)果處理輔助方法.

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

參數(shù): $key (mixed) – 列名或鍵值數(shù)組
$value (mixed) – 分配給列的值,$key 是單個(gè)字段名
返回類型: void

為特定列分配值。

getNextRow([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 結(jié)果集的下一行,不存在時(shí)返回 NULL
返回類型: mixed

返回結(jié)果集的下一行。

getPreviousRow([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 結(jié)果集的上一行,不存在時(shí)返回 NULL
返回類型: mixed

返回結(jié)果集的上一行。

getFirstRow([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 結(jié)果集的第一行,不存在時(shí)返回 NULL
返回類型: mixed

返回結(jié)果集的第一行。

getLastRow([$type = 'object'])

參數(shù): $type (string) – 要求的結(jié)果類型 - array, object, 或 類名
返回: 結(jié)果集的最后一行,不存在時(shí)返回 NULL
返回類型: mixed

返回結(jié)果集的最后一行。

getFieldCount()

返回: 結(jié)果集中字段的個(gè)數(shù)
返回類型: int

返回結(jié)果集中字段的個(gè)數(shù)。

用法: 詳見 結(jié)果處理輔助函數(shù).

getFieldNames()

returns: 列名稱的數(shù)組
rtype: array

返回一個(gè)包含結(jié)果集中字段名的數(shù)組。

getFieldData()

返回: 包含字段元數(shù)據(jù)的數(shù)組
返回類型: array

生成一個(gè)包含字段元數(shù)據(jù)的 stdClass 對象的數(shù)組。

freeResult()

返回類型: void

釋放一個(gè)結(jié)果集。

用法: 詳見 結(jié)果處理輔助函數(shù).

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)