クエリ結果の生成

クエリ結果の生成方法はいろいろあります:

結果の配列

getResult()

このメソッドは object の配列を返します。失敗時には 空の配列 を返します。一般的には foreach ループの中で使います。このようになります:

$query = $db->query("クエリ");

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

このメソッドは getResultObject() のエイリアスです。

結果を配列の配列として取得したい場合は文字列 'array' を渡します:

$query = $db->query("クエリ");

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

上記の使い方は getResultArray() のエイリアスです。

また、 getResult() には結果オブジェクトとしてインスタンスにしたいクラス名を文字列で渡すことができます

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

foreach ($query->getResult('User') as $user)
{
    echo $user->name; // access attributes
    echo $user->reverseName(); // or methods defined on the 'User' class
}

上記の方法は getCustomResultObject() のエイリアスです。

getResultArray()

このメソッドはクエリ結果を素の配列として返します。結果がなかった場合には空配列を返します。一般的には foreach ループの中で使います。このようになります:

$query = $db->query("クエリ");

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

結果の行

getRow()

このメソッドはクエリ結果を単一行で返します。もしクエリ結果が2行以上ある場合、1行目だけを返します。返値は object です。使用例です:

$query = $db->query("クエリ");

$row = $query->getRow();

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

特定の行が欲しい場合、第1引数に行番号を数値で指定します:

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

第2引数には結果オブジェクトとしてインスタンスにしたいクラス名を渡すことができます:

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

echo $row->name; // access attributes
echo $row->reverse_name(); // or methods defined on the 'User' class

getRowArray()

配列を返すこと以外は上記の row() メソッドと同じです。 例:

$query = $db->query("クエリ");

$row = $query->getRowArray();

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

特定の行が欲しい場合、第1引数に行番号を数値で指定します:

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

加えて、次の行/前の行/最初の行/最後の行を渡り歩くことができます。次のようなバリエーションです:

$row = $query->getFirstRow()
$row = $query->getLastRow()
$row = $query->getNextRow()
$row = $query->getPreviousRow()

デフォルトでは返値はオブジェクトです。文字列 'array' を渡すと配列が返ります:

$row = $query->getFirstRow('array')
$row = $query->getLastRow('array')
$row = $query->getNextRow('array')
$row = $query->getPreviousRow('array')

注釈

上記のすべてのメソッドは全行メモリに読み込んでいます(プリフェッチング)。Use getUnbufferedRow() for processing large result sets.

getUnbufferedRow()

このメソッドは単一行を返しますが、 row() のように全行をメモリにプリフェッチすることがありません。もしクエリが2行以上あれば、カレント行を返したうえで内部データポインタを次に進めます。

$query = $db->query("クエリ");

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

返値の型を指定するため、オプションとして 'object' (デフォルト) または 'array' を渡せます:

$query->getUnbufferedRow();                 // オブジェクト
$query->getUnbufferedRow('object');     // オブジェクト
$query->getUnbufferedRow('array');      // 連想配列

カスタム結果オブジェクト

結果の返値には getResult() が`stdClass`` を、 getResultArray() が array を返していますが、代わりにカスタムクラスのインスタンスを使うことができます。もしクラスがまだメモリに読み込まれていないなら、 Autoloader
が読み込みます。データベースから戻された値はすべて属性値としてオブジェクトに保持されます。もし属性値が宣言されていて public ではない場合、 __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;
                }
        }
}

後述の2つのメソッドに加え、次のメソッドがクラス名を受け取ることができます: getFirstRow()getLastRow()getNextRow()getPreviousRow()

getCustomResultObject()

要求されたクラスのインスタンスの配列として結果全部を返します。 唯一の引数として初期化したいクラスの名前を取ります。

例:

$query = $db->query("クエリ");

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

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

getCustomRowObject()

クエリ結果を単一行で返します。第1引数は結果行の行番号です。第2引数はインスタンスにしたいクラス名です。

例:

$query = $db->query("クエリ");

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

if (isset($row))
{
        echo $row->email;   // 属性へのアクセス
        echo $row->last_login('Y-m-d');   // クラスメソッドへのアクセス
}

getRow() メソッドを全く同じ方法で使うこともできます。

例:

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

Result Helper Methods

getFieldCount()

そのクエリのフィールド(カラム)の数を返します。クエリの結果オブジェクトに使っていることを確認してください:

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

echo $query->getFieldCount();

getFieldNames()

そのクエリのフィールド(カラム)の名前を配列で返します。 クエリの結果オブジェクトに使っていることを確認してください:

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

    echo $query->getFieldNames();

freeResult()

結果に割り当てているメモリを開放し、結果のリソース ID を削除します。通常、PHP はスクリプトの終了時に自動的にメモリを開放します。しかしながら、多くのクエリを特定のスクリプトで実行しているなら、作成したクエリ結果をつぎつぎ開放していき、メモリ消費を抑えたいことでしょう。

例:

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

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

$query->freeResult();  // $query の結果オブジェクトはもはや使えなくなります

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

$row = $query2->getRow();
echo $row->name;
$query2->freeResult(); // $query2 の結果オブジェクトはもはや使えなくなります

dataSeek()

このメソッドはフェッチ用の内部ポインタを前へ進めます。これは getUnbufferedRow() との併用でのみ意味があります。

正の数のみ受け取り、デフォルトは0です。成功時には TRUE を、失敗時には FALSE を返します。

$query = $db->query('SELECT `field_name` FROM `table_name`');
$query->dataSeek(5); // 最初の5行はスキップします
$row = $query->getUnbufferedRow();

注釈

すべてのデータベースドライバでこの機能をサポートしているわけではなく、その際は FALSE を返します。 一番注意すべきことは―― PDO ではこれは使えません。

クラスリファレンス

class CodeIgniterDatabaseBaseResult
getResult([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

取り出した行の配列

戻り値の型:

array

getResultArray() または getResultObject() あるいは getCustomResultObject() メソッドのラッパーです。

使い方は `Result Arrays`_ をご覧ください。

getResultArray()
戻り値:取り出した行の配列
戻り値の型:array

クエリ結果を配列にして返します。それぞれの行は連想配列です。

使い方は `Result Arrays`_ をご覧ください。

getResultObject()
戻り値:取り出した行の配列
戻り値の型:array

クエリ結果を配列にして返します。それぞれの行は stdClass のインスタンスです。

使い方は `Result Arrays`_ をご覧ください。

getCustomResultObject($class_name)
パラメータ:
  • $class_name (string) -- 結果行のクラス名
戻り値:

取り出した行の配列

戻り値の型:

array

クエリ結果を配列にして返します。それぞれの行は指定したクラスのインスタンスです。

getRow([$n = 0[, $type = 'object']])
パラメータ:
  • $n (int) -- 返値の行番号
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

指定された行、ない場合は NULL

戻り値の型:

mixed

getRowArray() または getRowObject() もしくは getCustomRowObject() のラッパーです。

使い方は `Result Rows`_ をご覧ください。

getUnbufferedRow([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

結果セットの次行、ない場合は NULL

戻り値の型:

mixed

次の結果行を取り出し、引数に応じた型で返します。

使い方は `Result Rows`_ をご覧ください。

getRowArray([$n = 0])
パラメータ:
  • $n (int) -- 返値の行番号
戻り値:

指定された行、ない場合は NULL

戻り値の型:

array

指定された行を連想配列で返します。

使い方は `Result Rows`_ をご覧ください。

getRowObject([$n = 0])
パラメータ:
  • $n (int) -- 返値の行番号
戻り値:

指定された行、ない場合は NULL

戻り値の型:

stdClass

指定された行を stdClass オブジェクトとして返します。

使い方は `Result Rows`_ をご覧ください。

getCustomRowObject($n, $type)
パラメータ:
  • $n (int) -- 次に返すべき結果の行番号
  • $class_name (string) -- 結果行のクラス名
戻り値:

指定された行、ない場合は NULL

戻り値の型:

$type

指定された行を指定のクラスのインスタンスとして返します。

dataSeek([$n = 0])
パラメータ:
  • $n (int) -- 次に返すべき結果の行番号
戻り値:

成功時は TRUE、失敗時は FALSE

戻り値の型:

bool

希望する位置に内部行ポインタを移動します。

使い方は Result Helper Methods をご覧ください。

setRow($key[, $value = NULL])
パラメータ:
  • $key (mixed) -- カラム名、またはキーと値をペアにした配列
  • $value (mixed) -- $key がカラム名の場合に、カラムに設定する値
戻り値の型:

void

値を特定のカラムに設定します。

getNextRow([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

結果セットの次行、ない場合は NULL

戻り値の型:

mixed

結果セットから次なる行を返します。

getPreviousRow([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

結果セットの前行、ない場合は NULL

戻り値の型:

mixed

結果セットの前の行を返します。

getFirstRow([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

結果セットの最初の行、ない場合は NULL

戻り値の型:

mixed

結果セットの最初の行を返します。

getLastRow([$type = 'object'])
パラメータ:
  • $type (string) -- 返値の型(array、object、クラス名)
戻り値:

結果セットの最後の行、ない場合は NULL

戻り値の型:

mixed

結果セットの最終行を返します。

getFieldCount()
戻り値:フィールドの個数を返します。
戻り値の型:int

結果セットのフィールド数を返します。

使い方は Result Helper Methods をご覧ください。

getFieldNames()
returns:カラム名の配列
rtype:array

結果セットのフィールド名を配列で返します。

getFieldData()
戻り値:フィールドのメタデータの配列
戻り値の型:array

フィールドメタデータを stdClass の配列で生成します。

freeResult()
戻り値の型:void

結果セットを開放します。

使い方は Result Helper Methods をご覧ください。