23.8.7.53 mysql_real_connect()
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_real_connect()
는 호스트
에서 실행중인 MySQL 데이터베이스 엔진에 연결을 시도합니다. mysql_real_connect()
는 유효한 MYSQL
연결 핸들 구조를 필요로하는 다른 모든 API 함수를 실행하기 전에 성공적으로 완료해야합니다.
매개 변수는 다음과 같이 지정합니다.
첫 번째 매개 변수로 기존의
MYSQL
구조의 주소를 지정합니다.mysql_real_connect()
를 호출하기 전에mysql_init()
를 호출하여MYSQL
구조를 초기화합니다.mysql_options()
를 호출하여 많은 연결 옵션을 변경할 수 있습니다. 섹션 23.8.7.49 "mysql_options ()" 를 참조하십시오.host
의 값은 호스트 이름 또는 IP 주소를 지정할 수 있습니다.host
가NULL
또는 문자열"localhost"
인 경우 로컬 호스트로의 연결로 간주됩니다. Windows의 경우 서버에서 공유 메모리 연결이 활성화되어있는 경우 클라이언트는 공유 메모리 연결을 사용하여 연결합니다. 그렇지 않은 경우에는 TCP / IP가 사용됩니다. Unix에서는 클라이언트는 Unix 소켓 파일을 사용하여 연결합니다. 로컬 연결에서는mysql_options()
에MYSQL_OPT_PROTOCOL
또는MYSQL_OPT_NAMED_PIPE
옵션에서 사용할 연결 유형에도 영향을 미칠 수 있습니다. 연결 유형이 서버에서 지원해야합니다. Windows에서"."
의host
값은 서버에서 명명 된 파이프 연결이 활성화되어있는 경우, 클라이언트는 명명 된 파이프를 사용하여 연결합니다. 명명 된 파이프 연결이 활성화되어 있지 않으면 오류가 발생합니다.user
파라미터는 사용자의 MySQL 로그인 ID가 포함됩니다.user
가NULL
또는 빈 문자열""
인 경우, 현재 사용자가 예상됩니다. Unix에서 이것은 현재 로그인 이름입니다. Windows ODBC에서는 현재 사용자 이름을 명시 적으로 지정해야합니다. 제 23 장 "Connector 및 API ' 의 Connector / ODBC 섹션을 참조하십시오.passwd
파라미터에는user
의 암호가 포함됩니다.passwd
가NULL
이면 빈 (빈) 암호 필드를 가진 사용자의user
테이블의 항목 만 일치를 확인합니다. 이렇게하면 데이터베이스 관리자는 사용자가 암호를 지정하고 있는지 여부에 따라 사용자가 다른 권한을 얻을 같은 MySQL 권한 시스템을 설정할 수 있습니다.참고mysql_real_connect()
를 호출하기 전에 패스워드를 암호화하려고하지 마십시오. 비밀번호 암호화는 클라이언트 API에 의해 자동으로 처리됩니다.user
및passwd
매개 변수는MYSQL
객체에 구성되는 문자 세트를 사용합니다. 기본적으로 이것은latin1
이지만, 연결 전에mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "
을 호출하여 변경할 수 있습니다.charset_name
")db
는 데이터베이스 이름입니다.db
가NULL
이 아닌 경우, 연결은 기본 데이터베이스를이 값으로 설정합니다.port
가 0이 아닌 경우, 값은 TCP / IP 연결 포트 번호로 사용됩니다.host
매개 변수는 연결의 종류를 결정합니다.unix_socket
가NULL
이 아닌 경우, 문자열은 사용하는 소켓 또는 명명 된 파이프를 지정합니다.host
매개 변수는 연결의 종류를 결정합니다.client_flag
값은 보통 0이지만, 특정 기능을 활성화하기 위해 다음 플래그의 조합으로 설정할 수 있습니다.플래그 이름 플래그 설명 CAN_HANDLE_EXPIRED_PASSWORDS
클라이언트는 만료 된 암호를 처리 할 수 있습니다. 자세한 내용은 섹션 6.3.6 "암호 만료 및 샌드 박스 모드" 를 참조하십시오. 이 옵션은 MySQL 5.6.10에서 추가되었다. CLIENT_COMPRESS
압축 프로토콜을 사용합니다. CLIENT_FOUND_ROWS
변경된 행의 수가 아니라, 발견 된 (일치) 행의 수를 돌려줍니다. CLIENT_IGNORE_SIGPIPE
클라이언트 라이브러리 SIGPIPE
시그널 핸들러의 설치를 방해합니다. 이것은 응용 프로그램이 이미 설치된 핸들러와의 충돌을 피하기 위해 사용할 수 있습니다.CLIENT_IGNORE_SPACE
함수 이름 뒤의 공백을 허용합니다. 모든 함수 이름을 예약어합니다. CLIENT_INTERACTIVE
연결을 닫을 때까지 interactive_timeout
초 (wait_timeout
초가 아니라)의 비활성화를 허용합니다. 클라이언트 세션wait_timeout
변수는 세션interactive_timeout
변수의 값으로 설정됩니다.CLIENT_LOCAL_FILES
LOAD DATA LOCAL
처리를 활성화합니다.CLIENT_MULTI_RESULTS
서버에 클라이언트는 여러 문을 실행 또는 저장 프로 시저에서 여러 결과 집합을 처리 할 수 알립니다. CLIENT_MULTI_STATEMENTS
이 활성화되어있는 경우이 플래그는 자동으로 활성화됩니다. 이 플래그에 대한 자세한 내용은이 표 다음에있는 참고를 참조하십시오.CLIENT_MULTI_STATEMENTS
서버에 클라이언트는 단일 문자열 ( " ;
"으로 구분 된) 여러 문을 보낼 수 있음을 알려줍니다. 이 플래그가 설정되어 있지 않은 경우, 다중 문 실행이 비활성화됩니다. 이 플래그에 대한 자세한 내용은이 표 다음에있는 참고를 참조하십시오.CLIENT_NO_SCHEMA
db_name.tbl_name.col_name
구문을 허용하지 않습니다. 이것은 ODBC 용입니다. 사용자가 그 구문을 사용하면 파서 오류를 생성합니다. 이것은 특정 ODBC 프로그램에서 버그 트랩에 도움이됩니다.CLIENT_ODBC
사용되지 않습니다. CLIENT_SSL
SSL (암호화 프로토콜)를 사용합니다. 응용 프로그램에서이 옵션을 설정하지 마십시오. 그것은 클라이언트 라이브러리 내부적으로 설정됩니다. 대신 mysql_real_connect()
를 호출하기 전에mysql_ssl_set()
를 사용합니다.CLIENT_REMEMBER_OPTIONS
mysql_options()
에 대한 호출에 지정된 옵션을 기억합니다. 이 옵션을 사용하지 않으면mysql_real_connect()
가 실패했을 경우 다시 연결을 시도하기 전에mysql_options()
호출을 반복해야합니다. 이 옵션을 사용하면mysql_options()
호출을 반복 할 필요가 없습니다.
프로그램에서 CALL
문을 사용하여 저장 프로 시저를 실행하는 경우 CLIENT_MULTI_RESULTS
플래그가 활성화되어 있어야합니다. 이것은 각 CALL
에 의해 프로 시저 내에서 실행되는 문에 의해 반환 될 수있는 결과 세트 이외에 호출 상태를 나타 내기위한 결과가되기 때문입니다. CALL
는 여러 결과를 반환 할 수 있기 때문에 mysql_next_result()
를 호출하는 루프를 사용하여 그들을 처리하고 그 이상의 결과가 있는지를 판단합니다.
CLIENT_MULTI_RESULTS
는 mysql_real_connect()
를 호출 할 때 CLIENT_MULTI_RESULTS
플래그 자체를 전달하여 명시 적으로 또는 CLIENT_MULTI_STATEMENTS
을 전달하여 암시 적으로 사용하는 (따라서 CLIENT_MULTI_RESULTS
도 적용됩니다) 수 있습니다. MySQL 5.6에서는 CLIENT_MULTI_RESULTS
은 기본적으로 활성화되어 있습니다.
CLIENT_MULTI_STATEMENTS
또는 CLIENT_MULTI_RESULTS
을 활성화 한 경우, 그 이상의 결과가 있는지를 판단하기 위해 mysql_next_result()
를 호출하는 루프를 사용하여 mysql_query()
또는 mysql_real_query()
에 대한 모든 호출의 결과를 처리 합니다. 예를 들어, 섹션 23.8.17 "여러 문 실행의 C API 지원" 을 참조하십시오.
일부 매개 변수는 mysql_real_connect()
호출에서 명시적인 값에서 아니라 옵션 파일에서 값을 검색 할 수 있습니다. 이렇게는 mysql_real_connect()
를 호출하기 전에 MYSQL_READ_DEFAULT_FILE
또는 MYSQL_READ_DEFAULT_GROUP
옵션을 사용하여 mysql_options()
를 호출합니다. 그 후, 옵션에서 읽은 매개 변수에 대해 mysql_real_connect()
를 호출하면 "no-value"값을 지정합니다.
host
에 대해NULL
또는 빈 문자열 (""
) 값을 지정합니다.user
대해NULL
또는 빈 문자열 값을 지정합니다.passwd
에 대해NULL
값을 지정합니다. (암호는mysql_real_connect()
호출의 빈 문자열의 값은 옵션 파일에서 재정의 할 수 없습니다. 빈 문자열은 MySQL 계정이 빈 암호를 가질 필요가있는 것을 명시 적으로 나타 내기 때문에 입니다.)db
대해NULL
또는 빈 문자열 값을 지정합니다.port
에 0의 값을 지정합니다.unix_socket
대해NULL
값을 지정합니다.
매개 변수 옵션 파일에 값이 없으면이 섹션 앞부분의 설명에 나타낸 바와 같이, 기본값이 사용됩니다.
반환 값
연결이 성공하면 MYSQL*
연결 핸들 연결이 실패한 경우 NULL
. 연결이 성공하면 반환 값은 첫 번째 매개 변수의 값과 동일합니다.
오류
CR_CONN_HOST_ERROR
MySQL 서버에 연결하는 데 실패했습니다.
CR_CONNECTION_ERROR
로컬 MySQL 서버에 연결하는 데 실패했습니다.
CR_IPSOCK_ERROR
IP 소켓의 작성에 실패했습니다.
CR_OUT_OF_MEMORY
메모리 부족.
CR_SOCKET_CREATE_ERROR
Unix 소켓의 작성에 실패했습니다.
CR_UNKNOWN_HOST
호스트 이름의 IP 주소 검색에 실패했습니다.
CR_VERSION_ERROR
다른 프로토콜 버전을 사용하는 클라이언트 라이브러리가 서버에 연결 시도에서 발생한 프로토콜 불일치.
CR_NAMEDPIPEOPEN_ERROR
Windows에서 명명 된 파이프 생성에 실패했습니다.
CR_NAMEDPIPEWAIT_ERROR
Windows에서 명명 된 파이프의 대기에 실패했습니다.
CR_NAMEDPIPESETSTATE_ERROR
Windows에서 파이프 핸들러의 취득에 실패했습니다.
CR_SERVER_LOST
connect_timeout
> 0에서 서버에 연결하는 데connect_timeout
초 이상 걸린 경우 또는init-command
의 실행 중에 서버가 중지했을 경우.CR_ALREADY_CONNECTED
MYSQL
연결 핸들은 이미 연결되어 있습니다.
예
MYSQL mysql; mysql_init(&mysql); mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name"); if (!mysql_real_connect(&mysql,"host","user","passwd","database",0,NULL,0)) { fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(&mysql)); }
mysql_options()
를 사용하여 MySQL 라이브러리는 누군가가 MySQL을 표준이 아닌 방법으로 설치 한 경우에도 프로그램이 작동하도록하는 my.cnf
파일의 [client]
및 [your_prog_name]
섹션을 읽기 합니다.
연결할 때 mysql_real_connect()
는 reconnect
플래그 ( MYSQL
구조의 일부)를 5.0.3 이전 API 버전에서는 1
값 이후 버전에서는 0
의 값으로 설정하십시오. 이 플래그의 1
의 값은 절단 된 연결을 위해 문을 실행할 수 없으면 포기하기 전에 서버에 다시 연결을 시도하는 것을 나타냅니다. mysql_options()
에 MYSQL_OPT_RECONNECT
옵션을 사용하여 다시 연결 동작을 제어 할 수 있습니다.