CodeIgniter User Guide Version 2.1.0


쿼리결과 생성(Generating Query Results)

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

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) 입니다.

만약 결과가 없을 수도 있는 쿼리를 수행한다면 아래와 같이 테스트를 먼저 해 보시는것이 좋습니다:

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

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

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

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

foreach ($query->result('User') as $row)
{
   echo $row->name; // call attributes
   echo $row->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'];
}

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

$query->row(0, 'User')
echo $row->name; // call 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')

결과 헬퍼 함수들 (Result Helper Functions)

$query->num_rows()

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

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

echo $query->num_rows();

$query->num_fields()

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

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

echo $query->num_fields();

$query->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