23.8.19 C API Prepared Statement date 및 time 값 처리
바이너리 (Prepared Statement) 프로토콜은 MYSQL_TIME 구조를 사용하여 시간 값 ( DATE , TIME , DATETIME , 그리고 TIMESTAMP )을주고받을 수 있습니다. 이 구조의 구성원은 섹션 23.8.9 "C API Prepared Statement 데이터 구조" 에서 설명하고 있습니다.
시간 데이터 값을 전송하려면 mysql_stmt_prepare() 를 사용하여 Prepared Statement을 만듭니다. 그 후, mysql_stmt_execute() 를 호출하여 문을 실행하기 전에 다음 단계를 사용하여 각 시간 매개 변수를 설정합니다.
데이터 값에 관련된
MYSQL_BIND구조에서buffer_type멤버를 보내는 시간 값의 종류를 나타내는 형태로 설정합니다.DATE,TIME,DATETIME또는TIMESTAMP값에서buffer_type을MYSQL_TYPE_DATE,MYSQL_TYPE_TIME,MYSQL_TYPE_DATETIME또는MYSQL_TYPE_TIMESTAMP에 각각 설정합니다.MYSQL_BIND구조의buffer멤버를 시간 값을 전달MYSQL_TIME구조의 주소로 설정합니다.배달 시간 값의 형태에 적절한
MYSQL_TIME구조의 멤버를 입력합니다.
mysql_stmt_bind_param() 을 사용하여 파라미터 데이터를 문에 바인딩합니다. 이는 mysql_stmt_execute() 를 호출 할 수 있습니다.
시간 값을 취득하는 경우, buffer_type 멤버를받을 것으로 기대 값의 형태로 설정하고 buffer 멤버를 반환 값을 배치하는 MYSQL_TIME 구조의 주소로 설정하는 것을 제외하고 단계는 동일합니다. mysql_stmt_bind_result() 를 사용하여 mysql_stmt_execute() 를 호출 한 뒤,하고 결과를 가져 오기 전에 문에 버퍼를 바인딩합니다.
이것은 DATE , TIME 및 TIMESTAMP 데이터를 삽입하는 간단한 예제입니다. mysql 변수는 유효한 접속 핸들로 간주됩니다.
MYSQL_TIME ts;
MYSQL_BIND bind[3];
MYSQL_STMT *stmt;
strmov(query, "INSERT INTO test_table(date_field, time_field, \
timestamp_field) VALUES(?,?,?");
stmt = mysql_stmt_init(mysql);
if (!stmt)
{
fprintf(stderr, " mysql_stmt_init(), out of memory\n");
exit(0);
}
if (mysql_stmt_prepare(mysql, query, strlen(query)))
{
fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
exit(0);
}
/* set up input buffers for all 3 parameters */
bind[0].buffer_type= MYSQL_TYPE_DATE;
bind[0].buffer= (char *)&ts;
bind[0].is_null= 0;
bind[0].length= 0;
...
bind[1]= bind[2]= bind[0];
...
mysql_stmt_bind_param(stmt, bind);
/* supply the data to be sent in the ts structure */
ts.year= 2002;
ts.month= 02;
ts.day= 03;
ts.hour= 10;
ts.minute= 45;
ts.second= 20;
mysql_stmt_execute(stmt);
..