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 |