2011. 7. 11. 20:11

mysql_real_connect() - Mysql 데이터베이스 엔진으로 연결 시도.

형태 & 인수

MYSQL *mysql_real_connect(

MYSQL *mysql,           /* MYSQL 구조의 어드레스 */

const char *host,        /* 호스트 이름 또는 IP 어드레스 (default = localhost) */

const char *user,       /* MySQL Login ID (default = 현재 로그인 이름) */

const char *passwd, /* 패스워드 (default = none) */

const char *db,           /* 데이터베이스 이름 (default = none) */

unsigned int port,      /* TCP/IP 연결 포트 (use default) */

const char *unix_socket,       /* 소켓 (use default) */

unsigned long client_flag)                /* flag (none) */

리턴 값

성공 : MYSQL* 연결 핸들 (= 첫 번째 파라미터)

실패 : NULL

사용자가 유효한 MYSQL 연결 핸들 구조를 요구하는 다른 어떤 API 함수를 

실행할 수 있기 전에 성공적으로 완료되어야 한다.

 

 

client_flag 값은 대체로 0이다. 그러나 정확한 기능을 작동하기 위해 다음 플래그의 조합으로 설정될 수 있다:

플래그(Flag) 이름

플래그(Flag) 설명

CLIENT_COMPRESS

압축 프로토콜 사용.

CLIENT_FOUND_ROWS

변경된 로우의 숫자가 아니라 찾은(맞는) 로우들의 숫자를 리턴.

CLIENT_IGNORE_SPACE

함수 이름 후에 공간 허용. 모든 함수 이름을 예비의 단어로 만듦.

CLIENT_INTERACTIVE

interactive_timeout 초 허용 (wait_timeout 초대신에)

of inactivity before closing the connection. 

클라이언트 세션 wait_timeout 변수는 세션

 interactive_timeout 변수 값으로 설정.

CLIENT_LOCAL_FILES

LOAD DATA LOCAL 조정 가능.

CLIENT_MULTI_STATEMENTS

싱글 문자열 (';'로 나눠진)에서 클라이언트가 다중(멀티) 명령문을 

보내도록 서버에 전달. 만약 이 플래그가 설정되어 있지 않다면, 

멀티-명령문 실행은 불가능하다.

CLIENT_MULTI_RESULTS

클라이언트가 멀티-명령문 실행 또는 스토어드 프로시저로부터 

멀티 결과 셋을 조정할 수 있다는 것을 서버에 전달. 

CLIENT_MULTI_STATEMENTS이 설정되어 있다면, 이것은 자동적으로 설정.

CLIENT_NO_SCHEMA

db_name.tbl_name.col_name 신텍스를 허용하지 않음. 이것은 ODBC용이다.

ODBC 프로그램에곤란한 버그에 사용하는 신텍스를 사용할 경우,

parser(쿼리문 분석기)가 에러를 출력하도록 한다.

CLIENT_ODBC

원격 데이터베이스를 사용할 때 ODBC를 사용하고 있는지 확인할 수 있다.

CLIENT_SSL

SSL 사용. 이 옵션은 어플리케이션 프로그램으로 설정될 수 없다; 

이것은 내부적으로 클라이언트 라이브러리 내에 설정된다.

mysql_real_connect()함수를 호출하기 전에mysql_ssl_set()함수를 사용.

 

 

[ 에러 ]

CR_CONN_HOST_ERROR

MySQL 서버로의 연결 실패.

CR_CONNECTION_ERROR

로컬 MySQL 서버로의 연결 실패

CR_IPSOCK_ERROR

IP소켓 생성 실패.

CR_OUT_OF_MEMORY

메모리 부족.

CR_SOCKET_CREATE_ERROR

유닉스 소켓 생성 실패.

CR_UNKNOWN_HOST

호스트 이름 용 IP 어드레스 찾기 실패.

CR_NAMEDPIPEOPEN_ERROR

윈도우에서 명명된 파이프 생성 실패

CR_NAMEDPIPEWAIT_ERROR

윈도우에서 명명된 파이프 대기(wait for) 실패.

CR_NAMEDPIPESETSTATE_ERROR

윈도우에서 파이프 핸들러(조정자) 획득 실패

CR_SERVER_LOST

connect_timeout > 0 이고 서버에 연결하는데

connect_timeout 초 보다 오래 걸리면 또는 서버가

or init-command을 실행하는 동안 죽는다면 실패.

 

[ 예제 ]

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

#define def_host_name   NULL     /* host to connect to (default = localhost) */
#define def_user_name   "rick"      /* user name (default = your login name) "*/
#define def_password    "bar"        /* password (default = none) */
#define def_db_name     NULL      /* dtabases to use (default = none) */
#define def_port_num    0               /* use default port */
#define def_socket_name NULL  /* use default socket name */

MYSQL my_conn;                    /* pointer to connection handler */

int main(int argc, char *argv[]) {

    mysql_init(&my_conn);
    if ( mysql_real_connect (
        &my_conn,                 /* pointer to connection handler */
        def_host_name,       /* host to connect to */
        def_user_name,       /* user name */
        def_password,          /* password */
        def_db_name,          /* database to use */
        def_port_num,          /* port (use default) */
        def_socket_name,   /* socket (use default) */
        0)                                 /* flags (none) */
    ) {
        printf("Connection success\n");
    } else {
        fprintf(stderr, "Failed to connect to databases: Error: %s\n",
            mysql_error(&my_conn));
    }

    mysql_close(&my_conn);
    return EXIT_SUCCESS;
}

   

 (※ 자세한 내용은 매뉴얼 페이지 참조)

Posted by devanix