1. MySQL 사용자·데이터베이스 준비

더보기
-- [테이블 생성: 회원 정보 저장]
CREATE TABLE Members (
  code     INT PRIMARY KEY AUTO_INCREMENT,        -- 고유 번호
  id       VARCHAR(12) NOT NULL,                  -- 사용자 ID
  pw       VARCHAR(18) NOT NULL,                  -- 비밀번호
  fname    VARCHAR(50) NOT NULL,                  -- 이름
  lname    VARCHAR(50) NOT NULL,                  -- 성
  ph       VARCHAR(20),                           -- 전화번호
  email    VARCHAR(100),                          -- 이메일
  disabled TINYINT(1) NOT NULL DEFAULT 0          -- 비활성(0=활성, 1=비활성)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- [샘플 데이터 6명 등록]
INSERT INTO Members (id, pw, fname, lname, ph, email, disabled) VALUES
  ('aaa', '1111', 'Richard', 'Choi',  '010-1234', 'abcd@a.com', 0),
  ('bbb', '222',  'Olivia',  'Kim',   '017-9999', 'zz@b.com',   0),
  ('ccc', '33',   'Rose',    'Park',  '019-6788', 'vvv@c.com',  1),
  ('d',   '4',    'C++',     'Lee',   '054-123',  'a@a.com',    0),
  ('e',   '55',   'Python',  'Ryu',   '02-88',    'b@b.com',    0),
  ('f',   '666',  'Java',    'Jo',    '070-876',  'c@c.com',    1);

 

2. CRUD 요약

더보기
-- [CREATE: 회원 추가]
INSERT INTO Members (id, pw, fname, lname, ph, email, disabled)
VALUES ('hacker', '1234', 'Eve', 'Hacker', '010-0000', 'eve@hacker.com', 0);

-- [READ: 전체 회원 목록 조회]
SELECT code, id, pw, fname, lname, ph, email, disabled FROM Members;

-- [UPDATE: 회원 비밀번호 변경]
UPDATE Members SET pw = 'newpass' WHERE id = 'e';

-- [DELETE: 회원 삭제]
DELETE FROM Members WHERE id = 'hacker';

 

3. CREATE (INSERT) : 회원 추가 (1)

더보기

1. INSERT 쿼리

-- 새로운 회원 추가 (예: id='hacker', pw='1234', 이름='Eve', 성='Hacker')
INSERT INTO Members (id, pw, fname, lname, ph, email, disabled)
VALUES ('hacker', '1234', 'Eve', 'Hacker', '010-0000', 'eve@hacker.com', 0);

 

 

 

 

2. INSERT C언어 사용 예제(1) - insert_member 함수(회원 추가)

void insert_member( MYSQL *conn,
                    const char *id,
                    const char *pw,
                    const char *fname,
                    const char *lname,
                    const char *ph,
                    const char *email,
                    int disabled ) 
{
  // [1] 쿼리문 저장용 버퍼 준비
  char sql[512];

  // [2] 쿼리문 조립: 전달받은 파라미터를 쿼리문에 삽입
  snprintf( sql, sizeof(sql),
            "INSERT INTO Members (id, pw, fname, lname, ph, email, disabled) VALUES "
            "('%s', '%s', '%s', '%s', '%s', '%s', %d);",
            id, 
            pw, 
            fname, 
            lname, 
            ph, 
            email, 
            disabled);

  // [3] 쿼리 실행 (실패 시 에러 메시지 출력)
  if (mysql_query(conn, sql)) {
      fprintf(stderr, "INSERT failed: %s\n", mysql_error(conn));
  }
}

 

mysql_query(conn, query)

 

mysql_query(conn, query)

공식문서 링크 MySQL :: MySQL 8.0 C API Developer Guide :: 5.4.57 mysql_query()MySQL 8.0 C API Developer Guide / ... / C API Basic Interface / C API Basic Function Descriptions / mysql_query() int mysql_query(MYSQL *mysql, const char *stmt_str) Execut

basiclike.tistory.com

 


 

4. CREATE (INSERT) : 회원 추가 (2) /w 구조체

더보기

1. INSERT C언어 사용 예제(2) - insert_member_struct 함수(구조체를 이용한 회원 추가)

// 회원정보 구조체 선언
typedef struct {
    char id[13];       // 사용자 ID (VARCHAR(12) + '\0')
    char pw[19];       // 비밀번호 (VARCHAR(18) + '\0')
    char fname[51];    // 이름 (First Name)
    char lname[51];    // 성 (Last Name)
    char ph[21];       // 전화번호
    char email[101];   // 이메일
    int  disabled;     // 비활성 여부 (0:활성, 1:비활성)
} Member;
void insert_member_struct( MYSQL *conn,        // MySQL 연결 객체
                          const Member *mem )  // 추가할 회원정보 구조체 포인터
{
  // [1] 쿼리문 저장용 버퍼 준비
  char sql[512];

  // [2] INSERT 쿼리문 조립
  snprintf( sql, sizeof(sql),
            "INSERT INTO Members "
            "(id, pw, fname, lname, ph, email, disabled) "
            "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %d);",
            mem->id,
            mem->pw,
            mem->fname,
            mem->lname,
            mem->ph,
            mem->email,
            mem->disabled );

  // [3] 쿼리 실행 (실패 시 에러 메시지 출력)
  if (mysql_query(conn, sql)) {
      fprintf(stderr, "INSERT failed: %s\n", mysql_error(conn));
  }
}
int main(void) {
    MYSQL *conn = mysql_init(NULL);
    // ... (이하 DB 코드 생략)

    // 회원정보 구조체 변수 선언 및 값 대입
    Member m = {"aaa", "1111", "홍", "길동", "010-1111", "aaa@a.com", 0};
    
    // 구조체 기반 INSERT 호출
    insert_member_struct(conn, &m);

    mysql_close(conn);
    return 0;
}

 

5. 소스코드

더보기
/*
 * mysql_insert_test.c
 *
 * Ubuntu에서 C 언어로 MySQL에 접속하여
 * Members 테이블을 구조체로 삽입하는 예제
 *
 * 컴파일 명령어:
 *   gcc mysql_insert_test.c -o mysql_insert_test \
 *       $(mysql_config --cflags) $(mysql_config --libs)
 *
 * 실행:
 *   ./mysql_insert_test
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>

// [1] DB 연결 정보 매크로
#define DB_HOST     "localhost"
#define DB_USER     "root"
#define DB_PASS     "1234"
#define DB_NAME     "sqldb"
#define DB_PORT     3306
#define DB_SOCKET   NULL
#define DB_CLIENT_FLAGS 0

// [2] 회원정보 구조체 선언
typedef struct {
    char id[13];        // [2-1] 사용자 ID (VARCHAR(12) + '\0')
    char pw[19];        // [2-2] 비밀번호 (VARCHAR(18) + '\0')
    char fname[51];     // [2-3] 이름
    char lname[51];     // [2-4] 성
    char ph[21];        // [2-5] 전화번호
    char email[101];    // [2-6] 이메일
    int  disabled;      // [2-7] 비활성 여부 (0:활성, 1:비활성)
} Member;

// [3] 구조체 기반 회원 추가 함수
void insert_member_struct(MYSQL *conn, const Member *mem) {
    char sql[512];

    // [3-1] INSERT 쿼리문 조립
    snprintf(sql, sizeof(sql),
        "INSERT INTO Members "
        "(id, pw, fname, lname, ph, email, disabled) "
        "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %d);",
        mem->id,
        mem->pw,
        mem->fname,
        mem->lname,
        mem->ph,
        mem->email,
        mem->disabled
    );

    // [3-2] 쿼리 실행 (실패 시 에러 메시지 출력)
    if (mysql_query(conn, sql)) {
        fprintf(stderr, "[3-2] INSERT failed: %s\n", mysql_error(conn));
    } else {
        printf("[3-2] 회원정보가 성공적으로 추가되었습니다.\n");
    }
}

int main(void) {
    MYSQL *conn;
    // [4] MySQL 연결 관련 변수

    // [5] MySQL 객체 초기화
    conn = mysql_init(NULL);
    if (!conn) {
        fprintf(stderr, "[5] mysql_init() failed\n");
        return EXIT_FAILURE;
    }

    // [6] 데이터베이스 연결
    if (!mysql_real_connect(conn,
                            DB_HOST,
                            DB_USER,
                            DB_PASS,
                            DB_NAME,
                            DB_PORT,
                            DB_SOCKET,
                            DB_CLIENT_FLAGS)) {
        fprintf(stderr, "[6] mysql_real_connect() failed:\n  %s\n", mysql_error(conn));
        mysql_close(conn);
        return EXIT_FAILURE;
    }

    // [7] 회원정보 구조체 변수 선언 및 값 대입
    Member m;
    strcpy(m.id,     "c언어");
    strcpy(m.pw,     "c++socket");
    strcpy(m.fname,  "지능");
    strcpy(m.lname,  "인공");
    strcpy(m.ph,     "011-2025");
    strcpy(m.email,  "LMS@email.com");
    m.disabled = 0;

    // [8] 구조체 기반 INSERT 호출
    insert_member_struct(conn, &m);

    // [9] DB 연결 종료
    mysql_close(conn);

    return 0;
}

 

 

6. snprintf