CodeIgniter User Guide Version 2.1.0


쿼리 실행 Queries

$this->db->query();

쿼리를 실행하기위해서는 다음 함수를 사용합니다.:

$this->db->query('YOUR QUERY HERE');

query() 함수는 데이터를 읽어오는 쿼리 실행시 결과 객체를 리턴합니다. 이 결과객체는 쿼리결과생성에서 사용할수 있습니다. 데이터를 쓰거나, 업데이트 하는 쿼리를 실행하면 그 성공여부에 따라서 TRUE 나FALSE 를 리턴합니다. 결과값을 가져오려면 아래와같이 쿼리함수를 특정 변수에 할당합니다.:

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

$this->db->simple_query();

이 함수는 $this->db->query() 함수의 간단 버전입니다.실행시 그 결과여부만을 단순히 TRUE 나 FALSE로 리턴합니다.또한 데이터베이스 결과셋이라든지 쿼리타이머,데이터바인딩의 컴파일(compile bind data), 디버깅을 위한 쿼리 저장등도 수행하지않습니다. 이 함수는 단순히 쿼리를 실행하는 역할만합니다. 대부분의 경우 이함수를 사용하지 않습니다.

데이터베이스 접두어를 수동으로 관리

데이터베이스 접두어가 설정되어 있고, 일반적인 SQL에서 테이블 이름에 그 접두어를 사용하고 싶다면, 아래와 같이 합니다

$this->db->dbprefix('tablename');
// outputs prefix_tablename

새로 연결하지 않고 프로그램에서 접두사를 변경하려면 다음 방법을 사용합니다:

$this->db->set_dbprefix('newprefix');

$this->db->dbprefix('tablename');
// outputs newprefix_tablename

식별자 보호 Protecting identifiers

데이터베이스를 사용할때 테이블과 필드 이름을 보호하는것이 좋습니다. 예를 들어 MySQL을 사용할경우 액티브레코드( Active Record )쿼리들은 자동으로 보호됩니다., 그러나, 수동으로 식별자를 보호하려면 아래와같이 합니다.:

$this->db->protect_identifiers('table_name');

이 함수는 테이블명에 접두어를 붙여주며 데이터베이스 설정파일에 접두어를 이미 설정해 두었다고 가정합니다. 접두어를 활성(enable)화 하려면 두번째 파라미터로TRUE (boolen)를 넘겨줍니다.:

$this->db->protect_identifiers('table_name', TRUE);

쿼리 이스케이프 하기 Escaping Queries

쿼리를 실행하기전에 데이터를 이스케이프하는것은 대단히 실용적인 보안강화 방법입니다. CI 에서는 이 작업을 돕기위해서 두가지 방법을 제공합니다.:

  1. $this->db->escape() 이 함수는 데이터형을 확인하여 문자열형(string)에만 자동으로 '( single quotes) 를 붙여줍니다.: $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
  2. $this->db->escape_str() 이 함수는 데이터형에 상관없이 이스케이프 시킵니다. 대부분의 경우 위의 함수를 사용하는것이 이 함수를 사용하는것보다 좋습니다.이 함수는 아래와 같이 사용합니다.: $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

쿼리 바인딩Query Bindings

바인딩 쿼리를 좀더 간단하게 해줍니다. 아래 예제를 보세요:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick'));

쿼리안에 있는 물음표는 자동으로 두번째 파라미터로 전달되는 배열의 값으로 치환 됩니다.

바인딩으로 사용하면 값들은 자동으로 이스케이프 되기때문에 보안에도 좋습니다. 이경우 수동으로 이스케이프해야하는 부담이 없으며, CI가 알아서 해줍니다.