바이너리 (프리페어드 명령문) 프로토콜은 MYSQL_TIME 구조를 사용해서 데이터와 시간 값 (DATE, TIME, DATETIME, 그리고 TIMESTAMP)를 전송하고 전달받을 수 있도록 한다.
임시 데이터 값을 전송하기 위해서는, mysql_stmt_prepare()를 사용해서 프리페어드 명령문을 생성한다. 그런 다음에, 명령문을 실행하기 위한 mysql_stmt_execute() 호출 이전에 각각의 임시 파라미터를 설정하기 위한 다음 과정을 진행한다:
1. 데이터 값과 관련된 MYSQL_BIND 구조에서, 전송할 임시 값의 종류를 가리키기 위한 buffer_type 멤버를 설정한다. DATE, TIME, DATETIME, 또는 TIMESTAMP 값의 경우에는 buffer_type을 MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATETIME, 또는 MYSQL_TYPE_TIMESTAMP에 설정한다.
2. MYSQL_BIND 구조의 buffer 멤버에 임시 값을 전달할 MYSQL_TIME 구조의 주소를 설정한다.
3. 전달할 임시 값에 적당한 타입용 MYSQL_TIME 구조 멤버를 채워 넣는다.
파라미터 데이터를 명령문에 바인딩할 때에는 mysql_stmt_bind_param()를 사용한다. 그런 후에 mysql_stmt_execute()를 호출한다.
임시 값을 추출하는 과정 역시 위와 비슷하지만, 추출하고자 하는 값의 타입으로 buffer_type 멤버를 설정하고, buffer 멤버는 리턴된 값이 들어갈 MYSQL_TIME 구조를 설정한다. mysql_stmt_execute()를 호출한 후 그리고 결과를 가져오기 전에 mysql_bind_results()를 사용해서 버퍼를 명령문에 바인딩한다.
아래의 예문을 보도록 하자:
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(), 메모리 부족\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);
..