MySQL

MySQL C API 주요 함수

powergirl 2025. 7. 10. 19:53
MYSQL *mysql_init(MYSQL *mysql)
더보기

MySQL 연결 객체 초기화.

 

인자

mysql: 이미 할당된 MYSQL 포인터. 보통 NULL 전달.

 

리턴

성공 시 MYSQL * 포인터 반환 (새 연결 객체)

실패 시 NULL 반환

 

MYSQL *conn = mysql_init(NULL);
if (conn == NULL) {
    fprintf(stderr, "mysql_init() failed\n");
    exit(1);
}

 

 

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
더보기

MySQL 서버에 실제 연결 시도

 

인자

mysql mysql_init으로 생성한 MYSQL 객체
host DB 서버 주소 (예: "localhost")
user DB 사용자명
passwd 비밀번호
db 사용할 DB 이름
port 포트번호 (보통 3306)
unix_socket 유닉스 도메인 소켓 경로 (없으면 NULL)
client_flag 옵션 (0 또는 CLIENT_* 상수)

 

리턴

연결 성공 시 mysql 포인터 반환

실패 시 NULL 반환

 

if (mysql_real_connect(conn, "localhost", "user", "pass", "dbname", 3306, NULL, 0) == NULL) {
    fprintf(stderr, "Connect error: %s\n", mysql_error(conn));
    mysql_close(conn);
    exit(1);
}

 

 

int mysql_query(MYSQL *mysql, const char *stmt_str)
더보기

SQL 쿼리 전송 및 실행

 

인자

mysql: 연결 객체
stmt_str: 실행할 쿼리 문자열 (예: "SELECT * FROM table;")

 

리턴

성공 시 0

실패 시 비0 (에러)

 

if (mysql_query(conn, "SELECT * FROM Members;")) {
    fprintf(stderr, "Query error: %s\n", mysql_error(conn));
}

 

 

MYSQL_RES *mysql_store_result(MYSQL *mysql)
더보기

쿼리 결과를 클라이언트 메모리로 모두 가져오기

 

인자

mysql: 연결 객체

 

리턴

결과 집합 포인터 (MYSQL_RES *)

실패 시 NULL (오류 또는 결과 없음)

 

MYSQL_RES *res = mysql_store_result(conn);
if (res == NULL) {
    fprintf(stderr, "Store result error: %s\n", mysql_error(conn));
}

 

 

MYSQL_RES *mysql_use_result(MYSQL *mysql);
더보기

서버에서 결과를 한 줄씩 받아오는 스트리밍 방식

메모리 절약이 되지만, 결과 다 처리하기 전엔 다른 쿼리 실행 못 함

 

사용 상황

결과 집합이 매우 클 때 (SELECT * FROM big_table)

클라이언트 메모리를 아끼고 싶을 때

 

주의

mysql_use_result() 사용 중에는 다른 쿼리 못 보냄

반드시 mysql_free_result()로 마무리해야 함

전체 결과가 아닌 한 줄씩 처리됨

 

리턴

성공: MYSQL_RES *

실패: NULL

 

if (mysql_query(conn, "SELECT * FROM Members"))
{
    fprintf(stderr, "Query error: %s\n", mysql_error(conn));
    exit(1);
}

MYSQL_RES *res = mysql_use_result(conn);
MYSQL_ROW row;

while ((row = mysql_fetch_row(res)) != NULL)
{
    printf("id: %s, pw: %s\n", row[1], row[2]);
}

mysql_free_result(res);

 

 

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
더보기

결과 집합에서 한 행(row)을 가져오기

 

인자

result: mysql_store_result()가 반환한 결과 집합

 

리턴

행 데이터 배열 (문자열 포인터 배열)

더 이상 읽을 행이 없으면 NULL

 

MYSQL_ROW row;
while ((row = mysql_fetch_row(res)) != NULL) {
    printf("id: %s, pw: %s\n", row[1], row[2]);
}

 

 

my_ulonglong mysql_affected_rows(MYSQL *mysql);
더보기

INSERT, UPDATE, DELETE 같은 DML 문 실행 후 영향을 받은 행의 수를 반환


주의

SELECT문에는 사용하지 않음 (결과는 항상 0)

INSERT, DELETE, UPDATE의 결과 확인용으로 적합

 

리턴

영향 받은 행 수 (성공 시)

-1 (실패 시)

 

if (mysql_query(conn, "UPDATE Members SET disabled = 1 WHERE id = 'aaa'"))
{
    fprintf(stderr, "Update error: %s\n", mysql_error(conn));
}
else
{
    my_ulonglong affected = mysql_affected_rows(conn);
    printf("Updated rows: %llu\n", affected);
}

 

 

unsigned long mysql_num_rows(MYSQL_RES *result)
더보기

결과 집합의 행(row) 수 반환

 

인자

result: 결과 집합

 

리턴

행 개수 (unsigned long)

 

unsigned long rows = mysql_num_rows(res);
printf("Total rows: %lu\n", rows);

 

 

void mysql_free_result(MYSQL_RES *result)
더보기

결과 집합 메모리 해제

 

인자

result: 결과 집합

 

리턴

없음

 

mysql_free_result(res);

 

 

void mysql_close(MYSQL *mysql)
더보기

MySQL 연결 종료 및 메모리 해제

 

인자

mysql: 연결 객체

 

리턴

없음

 

mysql_close(conn);

 

 

const char *mysql_error(MYSQL *mysql)
더보기

마지막 에러 메시지 문자열 반환

 

인자

mysql: 연결 객체

 

리턴

에러 메시지 문자열 (const char *)

 

fprintf(stderr, "Error: %s\n", mysql_error(conn));

 

 

실행 흐름

mysql_init()으로 객체 초기화
mysql_real_connect()로 DB 연결
mysql_query()로 쿼리 실행
mysql_store_result() 또는 mysql_use_result()로 결과 가져오기
mysql_fetch_row()로 결과 행 순회
mysql_free_result()로 결과 메모리 해제
mysql_close()로 연결 종료

'MySQL' 카테고리의 다른 글

CREATE TABLE  (3) 2025.08.26
MySQL - JOIN  (1) 2025.08.25
SELECT 문  (5) 2025.08.25