쿼리 결과 생성¶
쿼리 결과를 생성하는 방법은 여러 가지가 있습니다:
결과 배열¶
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_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
결과 세트에서 마지막 행을 반환합니다.
- field_data()¶
- 반환:
필드 메타데이터를 포함하는 배열
- 반환 형식:
array
필드 메타데이터를 포함하는
stdClass오브젝트의 배열을 생성합니다.
- list_fields()¶
- 반환:
열 이름의 배열
- 반환 형식:
array
결과 세트의 필드 이름을 포함하는 배열을 반환합니다.