쿼리 결과 생성 Generating Query Results

쿼리 결과를 생성하는데는 몇 가지 방법이 있습니다:

Result Arrays

result()

이 함수는 쿼리 결과를 객체배열(an array of objects)로 리턴합니다. 실패시에는 빈 배열을 리턴하죠. 일반적으로 foreach 루프에서 이 함수를 사용할거예요 . 예제:

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

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

위 함수는 result_object() 함수의 Alias 입니다.

각각의 결과를 객체화 할 수 있도록 클래스 이름을 result() 함수에 문자열로 넘겨줄 수 있습니다. (주의:클래스는 미리 로드되어 있어야 합니다)

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

이 함수는 쿼리수행의 결과로 순수한 배열을 리턴합니다. 결과가 없다면 빈 배열을 리턴합니다. 일반적으로 아래와 같은 foreach 루프에서 사용합니다.

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

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

Result Rows

row()

이 함수는 한 줄(a single row)의 결과만을 리턴합니다. 만약 쿼리가 한 줄이상의 결과셋을 리턴하는 상황이라면 맨 첫 번째 줄만 리턴합니다. 결과는 객체(object) 로 리턴됩니다. 아래 샘플을 보세요:

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

if ($query->num_rows() > 0)
{
        $row = $query->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; // access attributes
echo $row->reverse_name(); // or methods defined on the 'User' class

row_array()

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'];
}

만약 특정열의 결과를 리턴받고싶다면, 첫 번째 파라미터에 열번호를 넘겨주세요:

$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’)

Note

위의 모든 방법은 전체 결과를 메모리에 (프리페치로) 로드합니다. 큰 결과 셋의 진행을 위해 unbuffered_row() 를 사용하세요.

unbuffered_row()

이 함수는 메모리에 있는 전체 결과를 프리페칭 하지 않고, 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');        // associative array

Custom Result Objects

You can have the results returned as an instance of a custom class instead of a stdClass or array, as the result() and result_array() methods allow. This requires that the class is already loaded into memory. The object will have all values returned from the database set as properties. If these have been declared and are non-public then you should provide a __set() method to allow them to be 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()

쿼리 결과에서 단일 열을 반환합니다. 첫 번째 파라미터는 결과의 Row 번호입니다. 두 번째 파라미터는 인스턴스화된 클래스명입니다.

예제:

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

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

if (isset($row))
{
        echo $row->email;   // access attributes
        echo $row->last_login('Y-m-d');   // access class methods
}

완전 같은 방식으로 row() 함수를 사용할수도 있습니다.

예제:

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

결과 헬퍼 함수들 Result Helper Methods

num_rows()

쿼리 결과열의 개수를 리턴합니다. 아래예제에서, $query 는 쿼리 결과를 받는 변수입니다:

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

echo $query->num_rows();

Note

모든 데이터베이스 드라이버는 결과 세트의 총 수를 얻는 고유 방법이 있습니다. 이런 경우, 모든 데이터는 동일한 결과를 얻기 위해 수동으로 생성된 배열 count() 가 호출됩니다.

num_fields()

쿼리 결과의 필드(columns) 개수를 리턴합니다. 아래와 같이 쿼리 결과를 담은 객체에서 이 함수를 호출해야 한다는 것을 명심하세요:

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

echo $query->num_fields();

free_result()

이 함수는 쿼리 결과객체에 할당된 메모리를 비우고 객체 및 리소스 아이디를 제거합니다. 보통 PHP는 스크립트 실행이 완료되면 자동으로 메모리를 해제하나, 한 스크립트내에서 다수의 쿼리를 실행할 경우 각 리소스를 스크립트가 완료되기전에 해제해야할 때도 있습니다. 메모리를 너무 많이 소모하게 되면, 프로그램이 정지할 수도 있으니까요 . 이 함수는 아래와 같이 사용합니다.

예제:

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

이 함수는 다음 결과를 패치하기 위해 내부 포인터를 설정합니다. unbuffered_row() 와 함께 사용할 때만 유용합니다.

양의 정수만을 허락합니다. 성공시 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();

Note

모든 데이터베이스 드라이버는가 이 기능을 지원하는 것은 아닙니다. 그리고 지원하지 않는 경우에 FALSE를 반환합니다. 특히 - PDO와 함께 사용할 수 없습니다.

클래스 레퍼런스 Class Reference

class CI_DB_result
result([$type = 'object'])
인수:
  • $type (string) – Type of requested results - array, object, or class name
반환값:

Array containing the fetched rows

반환형:

array

result_array(), result_object() 그리고 custom_result_object() 함수들의 래퍼.

사용 : Result Arrays 참조.

result_array()
반환값:Array containing the fetched rows
반환형:배열(array)

쿼리 결과를 row의 배열로 반환합니다. 각각의 row 는 자체 연관 배열입니다.

사용 : Result Arrays 참조.

result_object()
반환값:Array containing the fetched rows
반환형:배열(array)

쿼리 결과를 row의 배열로 반환합니다. 각각의 row 는 stdClass 형식의 객체입니다.

사용 : Result Arrays 참조.

custom_result_object($class_name)
인수:
  • $class_name (string) – Class name for the resulting rows
반환값:

Array containing the fetched rows

반환형:

array

쿼리 결과를 row의 배열로 반환합니다. 각각의 row 는 지정된 클래스의 인스턴스입니다.

row([$n = 0[, $type = 'object']])
인수:
  • $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

row_array(), row_object() and ``custom_row_object() 함수의 래퍼.

사용 : Result Rows 참조.

unbuffered_row([$type = 'object'])
인수:
  • $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

다음 결과 행을 꺼내고, 그것을 요청 폼에 반환.

사용 : Result Rows 참조.

row_array([$n = 0])
인수:
  • $n (int) – Index of the query results row to be returned
반환값:

The requested row or NULL if it doesn’t exist

반환형:

array

연관 배열로 요청된 결과 행을 돌려줍니다.

Usage: see Result Rows.

row_object([$n = 0])
인수:
  • $n (int) – Index of the query results row to be returned
반환값:

The requested row or NULL if it doesn’t exist

반환형:

stdClass

stdClass 객체로 요청된 결과 행을 돌려줍니다.

Usage: see Result Rows.

custom_row_object($n, $type)
인수:
  • $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

요구된 클래스의 인스턴스로 요청된 결과 행을 돌려줍니다.

data_seek([$n = 0])
인수:
  • $n (int) – Index of the results row to be returned next
반환값:

TRUE on success, FALSE on failure

반환형:

bool

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

결과 헬퍼 함수 참조.

set_row($key[, $value = NULL])
인수:
  • $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

특정 칼럼에 값을 할당.

next_row([$type = 'object'])
인수:
  • $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

결과 셋에서 다음 행을 반환.

previous_row([$type = 'object'])
인수:
  • $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

결과 셋에서 이전 행을 반환.

first_row([$type = 'object'])
인수:
  • $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

결과 셋에서 처음 행을 반환.

last_row([$type = 'object'])
인수:
  • $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

결과 셋에서 마지막 행을 반환.

num_rows()
반환값:Number of rows in the result set
반환형:int

결과 셋의 총 행의 수를 반환.

Usage: see Result Helper Methods.

num_fields()
반환값:Number of fields in the result set
반환형:int

결과 셋에서 필드의 수를 반환.

결과 헬퍼 함수 참조.

field_data()
반환값:Array containing field meta-data
반환형:배열(array)

필드 메타 데이터를 담고 있는 stdClass 객체의 배열을 생성.

free_result()
반환형:void

결과 셋을 해제.

결과 헬퍼 함수 참조.

list_fields()
반환값:Array of column names
반환형:배열(array)

결과 셋에서 필드명을 담고 있는 배열을 반환