Superkkt Blog

MySQL query wrapping 함수

2006/03/24 17:50

MYSQL_RES *
DB_query(MYSQL *mysql, const char *query)
{
       MYSQL_RES *res;

       if(mysql_query(mysql, query))
               return NULL;

       if((res = mysql_store_result(mysql)) == NULL) {
               /* row를 리턴하지 않는 query를 실행한 경우 */
               if(mysql_field_count(mysql) == 0)
                       return (MYSQL_RES *) 1;
               else
                       return NULL;
       }

       return res;
}

/* 바이너리가 포함된 쿼리를 보낼때 사용하는 함수 */
MYSQL_RES *
DB_real_query(MYSQL *mysql, const char *query, unsigned long len)
{
      MYSQL_RES *res;

      if(mysql_real_query(mysql, query, len))
              return NULL;

      if((res = mysql_store_result(mysql)) == NULL) {
              /* row를 리턴하지 않는 query를 실행한 경우 */
              if(mysql_field_count(mysql) == 0)
                      return (MYSQL_RES *) 1;
              else
                      return NULL;
      }

      return res;
}

query를 실행하고 result를 리턴하는 함수이다. 사용시 주의할 점이 있다. db query 중에는 결과 row를 리턴하지 않는게 있는데 대표적인 예가 delete이다. 이런 종류의 query를 했을 경우에는 (MYSQL_RES *) 1 값을 리턴한다.

첫번째와 두번째의 차이점은 두번째는 바이너리를 포함하는 query를 보낼때 사용하는 함수이다. 세번째 인자로 전체 query의 길이를 넘겨줘서 NULL character가 포함된 query도 사용 할 수 있다.

그리고 이 함수를 호출하는 쪽에서 결과값 사용이 끝나면 반드시 mysql_free_result(MYSQL_RES *);를 사용해서 메모리를 해제해줘야 한다.
2006/03/24 17:50 2006/03/24 17:50

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment