23.8.9 C API Prepared Statement Data 구조
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 일시 치 처리" 를 참조하십시오.