23.8.6 C API Function 개요
C API에서 사용 가능한 함수에 대해 여기서 간략하게 설명하고, 나머지 섹션에서 자세히 설명합니다. 섹션 23.8.7 "C API 함수 설명" 을 참조하십시오.
표 23.4 C API 함수 이름과 설명
함수 | 설명 |
---|---|
my_init() | 전역 변수와 스레드 안전 프로그램의 스레드 핸들러를 초기화합니다 |
mysql_affected_rows() | 마지막 UPDATE , DELETE 또는 INSERT 쿼리에 의해 변경 / 삭제 / 삽입 된 행 수를 반환합니다 |
mysql_autocommit() | 자동 커밋 모드 켜기 / 끄기를 전환합니다 |
mysql_change_user() | 열려있는 연결의 사용자 및 데이터베이스를 변경합니다 |
mysql_character_set_name() | 현재 연결의 기본 문자 세트 이름을 돌려줍니다 |
mysql_client_find_plugin() | 플러그인에 대한 포인터를 반환합니다 |
mysql_client_register_plugin() | 플러그인을 등록합니다 |
mysql_close() | 서버 연결을 닫습니다 |
mysql_commit() | 트랜잭션을 커밋합니다 |
mysql_connect() | MySQL 서버에 연결합니다 (이 함수는 비추천입니다. 대신 mysql_real_connect() 를 사용하십시오) |
mysql_create_db() | 데이터베이스를 만듭니다 (이 함수는 비추천입니다. 대신에 SQL 문 CREATE DATABASE 를 사용하십시오) |
mysql_data_seek() | 쿼리 결과 집합의 모든 행 번호를 검색합니다 |
mysql_debug() | 지정된 문자열 DBUG_PUSH 를 실행합니다 |
mysql_drop_db() | 데이터베이스를 삭제합니다 (이 함수는 비추천입니다. 대신에 SQL 문 DROP DATABASE 를 사용하십시오) |
mysql_dump_debug_info() | 서버에 디버깅 정보를 로그에 기록합니다 |
mysql_eof() | 결과 세트의 마지막 행을 읽어 있는지 여부를 결정합니다 (이 함수는 비추천입니다. 대신 mysql_errno() 또는 mysql_error() 를 사용할 수 있습니다) |
mysql_errno() | 최근 호출 된 MySQL 함수의 에러 번호를 반환합니다 |
mysql_error() | 최근 호출 된 MySQL 함수의 에러 메시지를 반환합니다 |
mysql_escape_string() | SQL 문에서 사용하는 문자열에 특수 문자를 이스케이프합니다 |
mysql_fetch_field() | 다음 테이블 필드의 형태를 돌려줍니다 |
mysql_fetch_field_direct() | 필드 번호를 지정하여 테이블 필드의 형태를 돌려줍니다 |
mysql_fetch_fields() | 모든 필드 구조의 배열을 돌려줍니다 |
mysql_fetch_lengths() | 현재 행의 모든 컬럼의 길이를 돌려줍니다 |
mysql_fetch_row() | 결과 집합에서 다음 행을 가져옵니다 |
mysql_field_count() | 최근 문의 결과 컬럼의 수를 돌려줍니다 |
mysql_field_seek() | 지정된 컬럼에 컬럼 커서를 놓습니다 |
mysql_field_tell() | 마지막 mysql_fetch_field() 에 사용 된 필드 커서의 위치를 돌려줍니다 |
mysql_free_result() | 결과 세트에 사용 된 메모리를 해제합니다 |
mysql_get_character_set_info() | 기본 문자 세트에 대한 정보를 반환합니다 |
mysql_get_client_info() | 클라이언트 버전 정보를 문자열로 반환합니다 |
mysql_get_client_version() | 클라이언트 버전 정보를 정수로서 돌려줍니다 |
mysql_get_host_info() | 연결을 설명하는 캐릭터 라인을 돌려줍니다 |
mysql_get_proto_info() | 연결에 사용 된 프로토콜 버전을 반환합니다 |
mysql_get_server_info() | 서버 버전 번호를 반환합니다 |
mysql_get_server_version() | 서버의 버전 번호를 정수로서 돌려줍니다 |
mysql_get_ssl_cipher() | 현재 SSL 암호화를 돌려줍니다 |
mysql_hex_string() | 문자열을 16 진수 형식으로 인코딩합니다 |
mysql_info() | 최근 실행 된 쿼리에 대한 정보를 반환합니다 |
mysql_init() | MYSQL 구조를 획득하거나 초기화합니다 |
mysql_insert_id() | 이전 쿼리에서 AUTO_INCREMENT 컬럼에 생성 된 ID를 반환합니다 |
mysql_kill() | 지정된 스레드를 종료합니다 |
mysql_library_end() | MySQL C API 라이브러리를 종료합니다 |
mysql_library_init() | MySQL C API 라이브러리를 초기화합니다 |
mysql_list_dbs() | 간단한 정규식에 일치하는 데이터베이스 명을 돌려줍니다 |
mysql_list_fields() | 간단한 정규식에 일치하는 필드 명을 돌려줍니다 |
mysql_list_processes() | 현재 서버 스레드의 목록을 반환합니다. |
mysql_list_tables() | 간단한 정규식에 일치하는 테이블 명을 돌려줍니다 |
mysql_load_plugin() | 플러그인을로드합니다 |
mysql_load_plugin_v() | 플러그인을로드합니다 |
mysql_more_results() | 그 이상의 결과가 존재하는지 여부를 확인합니다 |
mysql_next_result() | 여러 결과의 실행에 다음의 결과를 반환하거나 초기화합니다 |
mysql_num_fields() | 결과 집합의 열 수를 돌려줍니다 |
mysql_num_rows() | 결과 세트 내의 행수를 돌려줍니다 |
mysql_options() | mysql_real_connect() 의 연결 옵션을 설정합니다 |
mysql_options4() | mysql_real_connect() 의 연결 옵션을 설정합니다 |
mysql_ping() | 서버에 대한 연결이 작동하는지 여부를 확인하고 필요에 따라 다시 연결합니다 |
mysql_plugin_options() | 플러그인 옵션을 설정합니다 |
mysql_query() | NULL로 끝나는 문자열로 지정된 SQL 쿼리를 실행합니다 |
mysql_real_connect() | MySQL 서버에 연결합니다 |
mysql_real_escape_string() | SQL 문에서 사용하는 문자열에 특수 문자를 탈출하고 연결의 현재 문자 집합을 고려합니다 |
mysql_real_query() | 카운트되는 문자열로 지정된 SQL 쿼리를 실행합니다 |
mysql_refresh() | 테이블 및 캐시를 플래시하거나 재설정합니다 |
mysql_reload() | 서버에 부여 테이블을 다시로드하도록 지시합니다 |
mysql_rollback() | 트랜잭션을 롤백합니다 |
mysql_row_seek() | mysql_row_tell() 에서 반환 된 값을 사용하여 결과 집합의 행 오프셋 탐색합니다 |
mysql_row_tell() | 행 커서 위치를 돌려줍니다 |
mysql_select_db() | 데이터베이스를 선택합니다 |
mysql_server_end() | MySQL C API 라이브러리를 종료합니다 |
mysql_server_init() | MySQL C API 라이브러리를 초기화합니다 |
mysql_set_character_set() | 현재 연결의 기본 문자 집합을 설정합니다 |
mysql_set_local_infile_default() | LOAD DATA LOCAL INFILE 핸들러 콜백을 해당 기본값으로 설정합니다 |
mysql_set_local_infile_handler() | 응용 프로그램 고유의 LOAD DATA LOCAL INFILE 핸들러 콜백을 설치합니다 |
mysql_set_server_option() | 연결 옵션 ( multi-statements )을 설정합니다. |
mysql_sqlstate() | 마지막 오류의 SQLSTATE 에러 코드를 돌려줍니다 |
mysql_shutdown() | 데이터베이스 서버를 종료합니다 |
mysql_ssl_set() | 서버에 SSL 연결을 준비합니다 |
mysql_stat() | 서버 상태를 문자열로 반환합니다 |
mysql_store_result() | 클라이언트에 대한 전체 결과 세트를 가져옵니다 |
mysql_thread_end() | 스레드 핸들러를 종료합니다 |
mysql_thread_id() | 현재 스레드 ID를 반환합니다 |
mysql_thread_init() | 스레드 핸들러를 초기화합니다 |
mysql_thread_safe() | 클라이언트가 thread 세이프로 컴파일 된 경우 1을 반환합니다 |
mysql_use_result() | 각 행의 결과 집합을 검색을 시작합니다 |
mysql_warning_count() | 이전 SQL 문 경고 카운트를 돌려줍니다 |
응용 프로그램은 MySQL과 상호 작용이 개요를 사용하십시오.
mysql_library_init()
를 호출하여 MySQL 라이브러리를 초기화합니다. 이 함수는libmysqlclient
C 클라이언트 라이브러리와libmysqld
임베디드 서버 라이브러리에 모두 존재하기 때문에-libmysqlclient
플래그로 연결하여 일반 클라이언트 프로그램을 구축하거나-libmysqld
플래그로 연결하여 임베디드 서버 응용 프로그램 구축 여부에 관계없이 사용됩니다.mysql_init()
를 호출하여 연결 핸들러를 초기화하고mysql_real_connect()
를 호출하여 서버에 연결합니다.SQL 문을 실행하여 그 결과를 처리합니다. (다음 설명에서 이렇게하는 방법에 대한 자세한 내용을 제공합니다.)
mysql_close()
를 호출하여 MySQL 서버에 대한 연결을 닫습니다.mysql_library_end()
를 호출하여 MySQL 라이브러리의 사용을 종료합니다.
mysql_library_init()
과 mysql_library_end()
의 호출 목적은 MySQL 라이브러리의 올바른 초기화 및 종료를 제공하는 것입니다. 클라이언트 라이브러리와 링크 된 응용 프로그램에서는 이러한 개선 된 메모리 관리 기능을 제공합니다. mysql_library_end()
를 호출하지 않으면 메모리 블록은 할당 된 상태입니다. (이것은 어플리케이션에 의해 사용되는 메모리의 양은 증가하지 않지만, 어떤 메모리 누수 탐지 도구가 그것을 관해서보고합니다.) 내장 서버와 연결된 응용 프로그램은 이러한 호출은 서버를 시작 및 중지 합니다.
비 멀티 스레드 환경에서 mysql_init()
가 필요에 따라 자동으로 mysql_library_init()
를 호출이 호출을 생략 할 수 있습니다. 그러나 mysql_library_init()
는 다중 스레드 환경에서 스레드로부터 안전하지 않으므로 mysql_library_init()
를 호출 mysql_init()
도 스레드로부터 안전하지 않습니다. 스레드를 생성하기 전에 mysql_library_init()
를 호출하는지, 그렇지 않으면 mysql_library_init()
를 호출하거나 mysql_init()
를 통해 간접적으로 호출하는지에 관계없이 상호 배타적 잠금을 사용하여 호출을 보호합니다 . 이것은 다른 모든 클라이언트 라이브러리를 호출하기 전에 실행해야합니다.
서버에 연결하려면 mysql_init()
를 호출하여 연결 핸들러를 초기화 한 후 그 핸들러 (호스트 이름, 사용자 이름 및 암호 등의 기타 정보와 함께) mysql_real_connect()
를 호출합니다. 연결할 때 mysql_real_connect()
는 reconnect
플래그 ( MYSQL
구조의 일부)를 5.0.3 이전 API 버전에서는 1
값 또는 새로운 버전에서는 0
으로 설정합니다. 이 플래그의 1
의 값은 절단 된 연결을 위해 문을 실행할 수 없으면 포기하기 전에 서버에 다시 연결을 시도하는 것을 나타냅니다. mysql_options()
에 MYSQL_OPT_RECONNECT
옵션을 사용하여 다시 연결 동작을 제어 할 수 있습니다. 연결을 종료 한 경우 mysql_close()
를 호출하여 그것을 종료시킵니다.
연결이 활성화되어있는 동안 클라이언트는 mysql_query()
또는 mysql_real_query()
를 사용하여 SQL 문을 서버에 보낼 수 있습니다. 둘 사이의 차이는 mysql_query()
는 쿼리가 NULL로 끝나는 문자열로 지정되기를 기대하지만, mysql_real_query()
에서 계산되는 문자열을 기대하는 것입니다. 문자열에 바이너리 데이터 (NULL 바이트를 포함 할 수있다)가 포함되어 있다면, mysql_real_query()
을 사용할 필요가 있습니다.
SELECT
이외의 각 쿼리 ( INSERT
, UPDATE
, DELETE
등)는 mysql_affected_rows()
를 호출하여 변경된 (영향을받은) 행 수를 확인할 수 있습니다.
SELECT
쿼리에서 선택된 행을 결과 집합으로 가져옵니다. (일부 문은 행을 반환한다는 점에서 SELECT
를 닮아있는 것에 주목하십시오. 여기에는 SHOW
, DESCRIBE
, 그리고 EXPLAIN
가 포함됩니다. 이러한 문을 SELECT
문처럼 취급합니다.)
클라이언트가 결과 세트를 처리하는 방법은 두 가지가 있습니다. 하나의 방법은 mysql_store_result()
를 호출하여 전체 결과 집합을 한 번에 검색하는 것입니다. 이 함수는 서버에서 쿼리에 의해 반환 된 모든 행을 검색하고이를 클라이언트에 저장합니다. 두 번째 방법은 클라이언트가 mysql_use_result()
를 호출하여 행마다 결과 집합을 검색을 시작하는 것입니다. 이 함수는 검색을 초기화하지만 실제로 서버로부터 행을 검색하지 않습니다.
두 경우 모두, mysql_fetch_row()
를 호출하여 행에 액세스합니다. mysql_store_result()
는 mysql_fetch_row()
는 이전에 서버에서 가져온 행에 액세스합니다. mysql_use_result()
는 mysql_fetch_row()
는 서버에서 실제로 행을 가져옵니다. mysql_fetch_lengths()
를 호출하여 각 행의 데이터 크기에 대한 정보를 얻을 수 있습니다.
결과 세트의 처리를 완료 한 후 mysql_free_result()
를 호출하여 그것을 사용 된 메모리를 해제합니다.
2 개의 포획 메커니즘은 보완입니다. 각 클라이언트 응용 프로그램에 가장 적절한 방법을 선택하십시오. 실제로 클라이언트는 mysql_store_result()
을 더 많이 사용하는 경향이 있습니다.
mysql_store_result()
의 장점은 모든 행이 클라이언트에 반입되어 있기 때문에 줄에 순차적으로 접근 할뿐만 아니라 mysql_data_seek()
또는 mysql_row_seek()
를 사용하여 결과 세트를 앞뒤로 이동하여 결과 세트 내의 현재 행의 위치를 바꿀 수 있습니다. mysql_num_rows()
를 호출하여 거기에 존재하는 행의 수를 알 수 있습니다. 한편, 큰 결과 세트에 대한 mysql_store_result()
의 메모리 요구 사항은 매우 높을 수 있기 때문에 메모리 부족 상황이 발생할 가능성이 높아집니다.
mysql_use_result()
의 장점은 한 번에 한 줄 밖에 유지하지 않기 때문에 클라이언트가 결과 세트를 위해 필요한 메모리가 적게되는 것입니다 (또한 할당 오버 헤드가 적기 때문에 mysql_use_result()
쪽이 빠를 가능성이 있습니다). 단점은 서버의 작동 중단을 방지하기 위해 각 행을 신속하게 처리해야 결과 집합의 행에 랜덤 액세스 할 수 없으며 (행 순차적으로 액세스 밖에 할 수 없습니다) 결과 세트 내의 행수가 그들을 모두 취득 할 때까지 알 수 있습니다. 또한 취득의 길을 찾고 있던 정보가 발견되었다고 판단해도 모든 행을 검색해야합니다.
API를 통해 클라이언트는 문이 SELECT
인지 여부를 알 수없고, 적절하게 문에 응답 할 수 있습니다 (필요한 경우 행을 가져옵니다). 이렇게하려면 각 mysql_query()
(또는 mysql_real_query()
) 다음에는 mysql_store_result()
를 호출합니다. 결과 세트의 호출이 성공하면 문은 SELECT
이었기 때문에 행을 읽을 수 있습니다. 결과 세트 호출이 실패했을 경우는, mysql_field_count()
를 호출하여 결과가 실제로 기대 한 것이었다 여부를 판단합니다. mysql_field_count()
가 0을 반환하면 문은 데이터를 반환하지 않고 (그것은 INSERT
, UPDATE
, DELETE
등이었다 것을 나타낸다) 행을 반환 예정되어 있지 않습니다. mysql_field_count()
가 제로가 아닌 경우 문은 행을 반환되어야하지만, 반환하지 않습니다. 이것은 문이 실패한 SELECT
이었음을 보여줍니다. 이를 수행 할 수있는 방법의 예는 mysql_field_count()
의 설명을 참조하십시오.
mysql_store_result()
과 mysql_use_result()
의 어느 쪽도 결과 세트를 구성하는 필드에 대한 정보 (필드의 수, 그 이름과 형태 등)을 얻을 수 있습니다. mysql_fetch_field()
를 반복 호출하거나 행의 필드 번호마다 mysql_fetch_field_direct()
를 호출하여 행의 필드 정보에 순차적으로 접근 할 수 있습니다. mysql_field_seek()
를 호출하여 현재 필드 커서 위치를 변경할 수 있습니다. 필드 커서를 설정하면 mysql_fetch_field()
에 대한 후속 호출에 영향을줍니다. mysql_fetch_fields()
를 호출하여 필드의 정보를 한 번에 검색 할 수 있습니다.
오류를 발견하고보고하기 위해 MySQL은 mysql_errno()
함수와 mysql_error()
함수는 오류 정보에 대한 액세스를 제공합니다. 이들은 최근 호출 된 성공 또는 실패 가능성이있는 함수 오류 코드 및 오류 메시지를 반환하는 오류가 발생한시기와 그것이 무엇인지를 확인할 수 있습니다.