쿼리 결과 생성

쿼리 결과를 생성하는 방법은 여러 가지가 있습니다:

결과 배열

result()

이 메소드는 쿼리 결과를 오브젝트의 배열로 반환하거나, 실패 시 빈 배열을 반환합니다. 일반적으로 다음과 같이 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; // 속성 접근
        echo $user->reverse_name(); // 또는 'User' 클래스에 정의된 메소드
}

result_array()

이 메소드는 쿼리 결과를 순수 배열로 반환하거나, 결과가 없을 때 빈 배열을 반환합니다. 일반적으로 다음과 같이 foreach 루프에서 사용합니다:

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

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

결과 행

row()

이 메소드는 단일 결과 행을 반환합니다. 쿼리에 둘 이상의 행이 있는 경우 첫 번째 행만 반환합니다. 결과는 오브젝트로 반환됩니다. 사용 예시입니다:

$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; // 속성 접근
echo $row->reverse_name(); // 또는 'User' 클래스에 정의된 메소드

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);

또한 다음 변형을 사용하여 결과를 앞/뒤/처음/마지막으로 이동할 수 있습니다:

$row = $query->first_row()
$row = $query->last_row()
$row = $query->next_row()
$row = $query->previous_row()

기본적으로 매개변수에 “array”를 넣지 않으면 오브젝트를 반환합니다:

$row = $query->first_row(‘array’)
$row = $query->last_row(‘array’)
$row = $query->next_row(‘array’)
$row = $query->previous_row(‘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');        // 연관 배열

커스텀 결과 오브젝트

result()result_array() 메소드가 허용하는 것처럼 stdClass 또는 배열 대신 커스텀 클래스의 인스턴스로 결과를 반환할 수 있습니다. 클래스가 이미 메모리에 로드되어 있어야 합니다. 오브젝트는 데이터베이스에서 반환된 모든 값을 속성으로 가집니다. 이것들이 선언되어 있고 비공개인 경우 설정될 수 있도록 __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;   // 속성 접근
        echo $row->last_login('Y-m-d');   // 클래스 메소드 접근
}

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()

쿼리에 의해 반환된 FIELD(열)의 수입니다. 쿼리 결과 오브젝트를 사용하여 메소드를 호출해야 합니다:

$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();  // $query 결과 오브젝트는 더 이상 사용할 수 없습니다

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

$row = $query2->row();
echo $row->name;
$query2->free_result(); // $query2 결과 오브젝트는 더 이상 사용할 수 없습니다

data_seek()

이 메소드는 다음에 가져올 결과 행의 내부 포인터를 설정합니다. unbuffered_row()와 함께 사용할 때만 유용합니다.

양의 정수 값을 허용하며 기본값은 0이고 성공 시 TRUE, 실패 시 FALSE를 반환합니다.

$query = $this->db->query('SELECT `field_name` FROM `table_name`');
$query->data_seek(5); // 처음 5개 행 건너뛰기
$row = $query->unbuffered_row();

참고

모든 데이터베이스 드라이버가 이 기능을 지원하는 것은 아니며 FALSE를 반환합니다. 특히 PDO에서는 사용할 수 없습니다.

클래스 레퍼런스

class CI_DB_result
result([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

가져온 행을 포함하는 배열

반환 형식:

array

result_array(), result_object(), custom_result_object() 메소드의 래퍼입니다.

사용법: 결과 배열 참조.

result_array()
반환:

가져온 행을 포함하는 배열

반환 형식:

array

쿼리 결과를 행의 배열로 반환하며, 각 행은 연관 배열입니다.

사용법: 결과 배열 참조.

result_object()
반환:

가져온 행을 포함하는 배열

반환 형식:

array

쿼리 결과를 행의 배열로 반환하며, 각 행은 stdClass 유형의 오브젝트입니다.

사용법: 결과 배열 참조.

custom_result_object($class_name)
매개변수:
  • $class_name (string) – 결과 행에 대한 클래스 이름

반환:

가져온 행을 포함하는 배열

반환 형식:

array

쿼리 결과를 행의 배열로 반환하며, 각 행은 지정된 클래스의 인스턴스입니다.

row([$n = 0[, $type = 'object']])
매개변수:
  • $n (int) – 반환할 쿼리 결과 행의 인덱스

  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

요청된 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

row_array(), row_object(), custom_row_object() 메소드의 래퍼입니다.

사용법: 결과 행 참조.

unbuffered_row([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

결과 세트의 다음 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

다음 결과 행을 가져와 요청된 형식으로 반환합니다.

사용법: 결과 행 참조.

row_array([$n = 0])
매개변수:
  • $n (int) – 반환할 쿼리 결과 행의 인덱스

반환:

요청된 행 또는 존재하지 않으면 NULL

반환 형식:

array

요청된 결과 행을 연관 배열로 반환합니다.

사용법: 결과 행 참조.

row_object([$n = 0])
매개변수:
  • $n (int) – 반환할 쿼리 결과 행의 인덱스

반환:

요청된 행 또는 존재하지 않으면 NULL

반환 형식:

stdClass

요청된 결과 행을 stdClass 유형의 오브젝트로 반환합니다.

사용법: 결과 행 참조.

custom_row_object($n, $type)
매개변수:
  • $n (int) – 반환할 결과 행의 인덱스

  • $class_name (string) – 결과 행에 대한 클래스 이름

반환:

요청된 행 또는 존재하지 않으면 NULL

반환 형식:

$type

요청된 결과 행을 요청된 클래스의 인스턴스로 반환합니다.

data_seek([$n = 0])
매개변수:
  • $n (int) – 다음에 반환될 결과 행의 인덱스

반환:

성공 시 TRUE, 실패 시 FALSE

반환 형식:

bool

내부 결과 행 포인터를 원하는 오프셋으로 이동합니다.

사용법: 결과 헬퍼 메소드 참조.

set_row($key[, $value = NULL])
매개변수:
  • $key (mixed) – 열 이름 또는 키/값 쌍의 배열

  • $value (mixed) – 열에 할당할 값, $key가 단일 필드 이름인 경우

반환 형식:

void

특정 열에 값을 할당합니다.

next_row([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

결과 세트의 다음 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

결과 세트에서 다음 행을 반환합니다.

previous_row([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

결과 세트의 이전 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

결과 세트에서 이전 행을 반환합니다.

first_row([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

결과 세트의 첫 번째 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

결과 세트에서 첫 번째 행을 반환합니다.

last_row([$type = 'object'])
매개변수:
  • $type (string) – 요청된 결과 유형 - array, object, 또는 클래스 이름

반환:

결과 세트의 마지막 행 또는 존재하지 않으면 NULL

반환 형식:

mixed

결과 세트에서 마지막 행을 반환합니다.

num_rows()
반환:

결과 세트의 행 수

반환 형식:

int

결과 세트의 행 수를 반환합니다.

사용법: 결과 헬퍼 메소드 참조.

num_fields()
반환:

결과 세트의 필드 수

반환 형식:

int

결과 세트의 필드 수를 반환합니다.

사용법: 결과 헬퍼 메소드 참조.

field_data()
반환:

필드 메타데이터를 포함하는 배열

반환 형식:

array

필드 메타데이터를 포함하는 stdClass 오브젝트의 배열을 생성합니다.

free_result()
반환 형식:

void

결과 세트를 해제합니다.

사용법: 결과 헬퍼 메소드 참조.

list_fields()
반환:

열 이름의 배열

반환 형식:

array

결과 세트의 필드 이름을 포함하는 배열을 반환합니다.