二進位 (預處理語句) 通訊協定可讓您使用 MYSQL_TIME
結構傳送和接收日期和時間值 (DATE
、TIME
、DATETIME
和 TIMESTAMP
)。此結構的成員說明於第 6.2 節,「C API 預處理語句資料結構」。
若要傳送時間資料值,請使用 mysql_stmt_prepare()
建立預處理語句。接著,在呼叫 mysql_stmt_execute()
執行語句之前,請使用以下程序來設定每個時間參數:
使用 mysql_stmt_bind_param()
或 mysql_stmt_bind_named_param()
將參數資料繫結至語句。然後,您可以呼叫 mysql_stmt_execute()
。
若要擷取時間值,程序類似,但您要將 buffer_type
成員設定為您預期接收的值類型,並將 buffer
成員設定為應放入傳回值的 MYSQL_TIME
結構的位址。在呼叫 mysql_stmt_execute()
之後以及擷取結果之前,請使用 mysql_stmt_bind_result()
將緩衝區繫結至語句。
以下是一個簡單的範例,說明如何插入 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_named_param(stmt, bind, 3, NULL);
/* 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);
..