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;
}
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 *);를 사용해서 메모리를 해제해줘야 한다.

comments
comments rss (+댓글 쓰러가기)