• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 1. MySQL Connector / ODBC
    2. MySQL Connector/Net
    3. MySQL Connector/J
    4. MySQL Connector/C++
    5. MySQL Connector/C
    6. MySQL Connector/Python
    7. libmysqld, the Embedded MySQL Server Library
    8. MySQL C API
    1. MySQL C API 구현
    2. MySQL Server MySQL Connector/C 동시 설치
    3. C API 클라이언트 프로그램 예제
    4. Building and Running C API Client Programs
    5. C API Data 구조
    6. C API Function 개요
    7. C API Function 설명
    8. C API Prepared Statements
    9. C API Prepared Statement Data 구조
    1. C API Prepared Statement 유형 코드
    2. C API Prepared Statement 형 변환
    10. C API Prepared Statement 함수 개요
    11. C API Prepared Statement 함수 설명
    12. C API Threaded 함수 설명
    13. C API 임베디드 서버 함수 설명
    14. C API Client Plugin 함수
    15. C API를 사용하는 경우 일반적인 질문과 문제
    16. 자동 재 연결 동작 제어
    17. 여러 명령문 실행 C API 지원
    18. C API Prepared Statement 문제
    19. C API Prepared Statement date 및 time 값 처리
    20. C API의 Prepared CALL Statements 지원
    9. MySQL PHP API
    10. MySQL Perl API
    11. MySQL Python API
    12. MySQL Ruby APIs
    13. MySQL Tcl API
    14. MySQL Eiffel Wrapper
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

23.8.9 C API Prepared Statement Data 구조

23.8.9.1 C API Prepared Statement 유형 코드
23.8.9.2 C API Prepared Statement 형 변환

Prepared Statement은 일부 데이터 구조를 사용합니다.

  • 명령문 핸들을 얻으려면, MYSQL 연결 처리기를 mysql_stmt_init() 에 전달합니다. 이것은 MYSQL_STMT 데이터 구조에 포인터를 반환합니다. 이 구조는 문의 후속 처리에 사용됩니다. Prepared Statement를 지정하려면 MYSQL_STMT 포인터와 문 문자열을 mysql_stmt_prepare() 에 전달합니다.

  • Prepared Statement의 입력 매개 변수를 제공하려면 MYSQL_BIND 구조를 설정하여 그들을 mysql_stmt_bind_param() 에 전달합니다. 출력 컬럼 값을 받으려면, MYSQL_BIND 구조를 설정하고이를 mysql_stmt_bind_result() 에 전달합니다.

  • MYSQL_TIME 구조는 양방향으로 시간 데이터를 전송하는 데 사용됩니다.

다음의 설명에서는 Prepared Statement 데이터 형식을 자세히 설명합니다. 그 사용 방법에 대한 예는 섹션 23.8.11.10 "mysql_stmt_execute ()" 및 섹션 23.8.11.11 "mysql_stmt_fetch ()" 를 참조하십시오.

  • MYSQL_STMT

    이 구조는 Prepared Statement 핸들입니다. 핸들을 작성하려면 mysql_stmt_init() 를 호출합니다. 이것은 MYSQL_STMT 에 대한 포인터를 반환합니다. 핸들은 mysql_stmt_close() 로 닫기 (그 시점에서 핸들이 무효가됩니다)까지 다음의 모든 문 작업에 사용됩니다.

    MYSQL_STMT 구조는 응용 프로그램에서 사용하는 것이 의도 된 회원이 없습니다. 응용 프로그램은 MYSQL_STMT 구조를 복사하려고하지 마십시오. 그와 같은 자료를 사용할 수 보장 할 수 없습니다.

    여러 문 핸들을 하나의 연결에 연결할 수 있습니다. 핸들 제한은 사용 가능한 시스템 리소스에 따라 다릅니다.

  • MYSQL_BIND

    이 구조는 명령문 입력 (서버에 전송되는 데이터 값)과 출력 (서버에서 반환 된 결과 값) 모두에 사용됩니다.

    • 입력의 경우 mysql_stmt_bind_param() 에서 MYSQL_BIND 구조를 사용하여 매개 변수 데이터 값을 mysql_stmt_execute() 에서 사용하기 위해 버퍼에 바인딩합니다.

    • 출력의 경우는 mysql_stmt_bind_result() 에서 MYSQL_BIND 구조를 사용하여 mysql_stmt_fetch() 에 의해 행 페치에서 사용하기 위해 버퍼를 결과 집합 열에 바인딩합니다.

    MYSQL_BIND 구조를 사용하려면 그 내용을 제로로 초기화 한 후 그 멤버를 적절하게 설정합니다. 예를 들어, 3 개의 MYSQL_BIND 구조의 배열을 선언하고 초기화하려면이 코드를 사용합니다.

     MYSQL_BIND bind [3];
     memset (bind, 0, sizeof (bind));
    

    MYSQL_BIND 구조는 어플리케이션 프로그램에서 사용하는 다음 멤버가 포함됩니다. 일부 구성원에 대해 사용하는 방법은 구조가 입력에 사용되거나 출력에 사용되는지에 따라 다릅니다.

    • enum enum_field_types buffer_type

      버퍼의 종류. 이 멤버는 문 매개 변수 또는 결과 세트 컬럼에 바인딩되어있는 C 언어 변수의 데이터 형식을 나타냅니다. 입력의 경우, buffer_type 은 서버로 전송되는 값을 저장하는 변수의 형태를 나타냅니다. 출력의 경우, 그것은 서버에서받은 값을 저장해야 할 변수 유형을 나타냅니다. 허용되는 buffer_type 값은 섹션 23.8.9.1 "C API Prepared Statement 유형 코드" 를 참조하십시오.

    • void *buffer

      데이터 전송에 사용되는 버퍼의 포인터. 이것은 C 언어 변수의 주소입니다.

      입력의 경우 buffer 는 문 매개 변수의 데이터 값을 저장하는 변수에 대한 포인터입니다. mysql_stmt_execute() 를 호출하면, MySQL은 문에서 해당 매개 변수 마커 (문 문자열에 ? 로 지정되는) 대신에 변수에 저장되어있는 값을 사용합니다.

      출력의 경우, buffer 는 결과 세트 컬럼 값을 반환하는 변수에 대한 포인터입니다. mysql_stmt_fetch() 를 호출하면, MySQL은 결과 세트의 현재 행의 열 값을 변수에 저장합니다. 호출이 돌아 오면 값에 액세스 할 수 있습니다.

      MySQL은 클라이언트 측의 C 언어 값과 서버 측의 SQL 값 사이의 유형 변환을 수행 할 필요성을 최소화하려면 해당 SQL 값의 형태와 유사한 형태를 가지는 C 변수를 사용합니다.

      • 숫자 데이터 형식의 경우 buffer 는 정확한 수치 C 형의 변수를 가리키는해야합니다. 정수 변수 (이것은 단일 바이트 값의 경우 char 또는 큰 값의 경우 정수를 지정할 수 있습니다)의 경우, 후술하는 is_unsigned 멤버를 설정하여 변수를 unsigned 속성을 가질 지 어떨지도 지정 바랍니다.

      • 문자 (비 바이너리) 및 이진 문자열 데이터 형의 경우, buffer 는 문자 버퍼를 가리 키도록하십시오.

      • 날짜 및 시간 데이터 유형의 경우, buffer 는 MYSQL_TIME 구조를 가리 키도록하십시오.

      C 형과 SQL 형 간의 매핑 지침 및 형식 변환에 관한주의 사항은 섹션 23.8.9.1 "C API Prepared Statement 유형 코드" 및 섹션 23.8.9.2 "C API Prepared Statement 형 변환" 을 참조하십시오.

    • unsigned long buffer_length

      *buffer 의 바이트의 실제 크기입니다. 이것은 버퍼에 저장할 수있는 최대 데이터 양을 나타냅니다. 문자 및 바이너리 C 데이터의 경우 buffer_length 값은 입력 값을 지정하는 mysql_stmt_bind_param() 와 함께 사용했을 때 *buffer 의 길이 또는 mysql_stmt_bind_result() 와 함께 사용하면 버퍼에 가져올 수 출력 데이터 바이트의 최대 수를 지정합니다.

    • unsigned long *length

      *buffer 에 저장된 데이터의 실제 바이트 수를 나타내는 unsigned long 변수에 대한 포인터. length 는 문자 또는 이진 C 데이터에 사용됩니다.

      입력 파라미터 데이터 바인딩의 경우 *buffer 에 저장된 파라미터 값의 실제 길이를 같이 *length 를 설정합니다. 이것은 mysql_stmt_execute() 에서 사용됩니다.

      출력 값 바인딩의 경우, mysql_stmt_fetch() 를 호출 할 때, MySQL에 의해 *length 가 설정됩니다. mysql_stmt_fetch() 의 반환 값에 의해 길이의 해석 방법을 결정합니다.

      • 반환 값이 0 인 경우 *length 는 파라미터 값의 실제 길이를 나타냅니다.

      • 반환 값이 MYSQL_DATA_TRUNCATED 의 경우 *length 는 파라미터 값 잘림되지 않은 길이를 나타냅니다. 이 경우, *length 과 buffer_length 의 최소 값의 실제 길이를 나타냅니다.

      buffer_type 값에 따라 데이터 값의 길이가 결정되기 때문에 length 는 숫자와 시간 데이터 형에 대해서는 무시됩니다.

      반환 값의 길이를 페치하기 전에 확인해야 할 경우 몇 가지 전략에 대한 섹션 23.8.11.11 "mysql_stmt_fetch ()" 를 참조하십시오.

    • my_bool *is_null

      이 멤버는 값이 NULL 의 경우에 true로, 그것이 NULL 이 아닌 경우 false 인 my_bool 변수를 지시합니다. 입력은 *is_null 를 true로 설정하여 문 매개 변수로 NULL 값을 전달하는 것을 나타냅니다.

      is_null 은 boolean 스칼라 포인터에 NULL 값 지정 방법의 유연성을 제공합니다.

      • 데이터 값이 항상 NULL 이면 열 바인딩시 buffer_type 값으로 MYSQL_TYPE_NULL 을 사용합니다. is_null 을 포함한 다른 MYSQL_BIND 멤버는 중요하지 않습니다.

      • 데이터 값이 항상 NOT NULL 이면, is_null = (my_bool*) 0 을 설정하고 바인딩 변수에 적절하게 다른 멤버를 설정합니다.

      • 다른 모든 경우에 다른 멤버를 적절하게 설정하고 is_null 에 my_bool 변수의 주소를 설정합니다. 실행과 실행 사이에 그 변수의 값을 true 또는 false로 적절하게 설정하여 해당 데이터 값이 각각 NULL 이거나 NOT NULL 인지를 나타냅니다.

      출력의 경우 행을 인출하면 MySQL은 문에서 반환 된 결과 세트 컬럼 값이 NULL 인지 여부에 따라 is_null 에서 지시되는 값을 true 또는 false로 설정합니다.

    • my_bool is_unsigned

      이 멤버는 unsigned ( char , short int , int , long long int )를 지정된 유형을 가진 C 변수에 적용됩니다. buffer 에 의해 지시되는 변수가 unsigned 의 경우 is_unsigned 를 true로 설정하고 그렇지 않으면 false로 설정합니다. 예를 들어, signed char 변수를 buffer 에 바인드 할 경우 MYSQL_TYPE_TINY 유형 코드를 지정하고 is_unsigned 를 false로 설정합니다. 대신에 unsigned char 를 바인드하는 경우, 타입 코드는 동일하지만 is_unsigned 를 true로하십시오. ( char 의 경우 그것은 부호 첨부 나 부호 없음인지 정의되지 않기 때문에 signed char 와 unsigned char 를 사용하여 부호의 유무를 명시하는 것이 좋습니다.)

      is_unsigned 는 클라이언트 측의 C 언어 변수에만 적용됩니다. 그것은 서버 측의 대응하는 SQL 값의 부호의 유무에 대해서는 아무것도 나타내지 않습니다. 예를 들어, int 변수를 사용하여 BIGINT UNSIGNED 컬럼의 값을 제공하는 경우 int 는 부호있는 형태이기 때문에 is_unsigned 는 false로해야합니다. unsigned int 변수를 사용하여 BIGINT 컬럼의 값을 제공하는 경우, unsigned int 는 부호없는 형식이기 때문에 is_unsigned 를 true로해야합니다. MySQL은 부호있는 값과 부호없는 값으로 양방향으로 올바른 변환을 수행하지만 잘림이 발생하면 경고가 생성됩니다.

    • my_bool *error

      출력의 경우,이 멤버를 my_bool 변수를 가리 키도록 설정하고 행 페 다음에는 거기에 포함되는 파라미터 잘림 정보를 보유하고 있습니다. 잘린 보고서를 사용하면 mysql_stmt_fetch() 는 MYSQL_DATA_TRUNCATED 을 돌려 절단이 발생한 파라미터의 MYSQL_BIND 구조에서 *error 가 true가됩니다. 잘라내 기는 부호 또는 자리 빠짐 또는 문자열이 너무 길어서 컬럼에 들어 가지 않았 음을 나타냅니다. 잘린 보고서는 기본적으로 활성화되어 있지만 MYSQL_REPORT_DATA_TRUNCATION 옵션을 사용하여 mysql_options() 를 호출하여 제어 할 수 있습니다.

  • MYSQL_TIME

    이 구조는 DATE , TIME , DATETIME , 그리고 TIMESTAMP 데이터를 직접 서버와주고받는 데 사용됩니다. buffer 멤버를 MYSQL_TIME 구조를 가리 키도록 설정하고 MYSQL_BIND 구조의 buffer_type 멤버 중 하나 시간 형 ( MYSQL_TYPE_TIME , MYSQL_TYPE_DATE , MYSQL_TYPE_DATETIME , MYSQL_TYPE_TIMESTAMP )로 설정합니다.

    MYSQL_TIME 구조는 다음 표에 나와있는 멤버가 포함됩니다.

    회원 설명
    unsigned int year 년
    unsigned int month 달
    unsigned int day 하루
    unsigned int hour 시간
    unsigned int minute 분
    unsigned int second 초
    my_bool neg 시간이 부인지 여부를 나타내는 boolean 플래그
    unsigned long second_part 밀리 초 단위로 소수 단위 초 (MySQL 5.6.4 이전 버전에서는 미사용)

    시간 값의 지정된 형식에 적용하는 MYSQL_TIME 구조의 부분 만 사용됩니다. year , month , 그리고 day 요소는 DATE , DATETIME , 그리고 TIMESTAMP 값에 사용됩니다. hour , minute 및 second 요소는 TIME , DATETIME , 그리고 TIMESTAMP 값에 사용됩니다. 섹션 23.8.19 "C API Prepared Statement 일시 치 처리" 를 참조하십시오.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved