二進制協(xié)議允許你使用mysql_time結(jié)構(gòu)發(fā)送和接受日期和時間值(date、time、datetime和timestamp)。在25.2.5節(jié),“c api預處理語句的數(shù)據(jù)類型”中,介紹了該結(jié)構(gòu)的成員。
要想發(fā)送臨時數(shù)據(jù)值,可使用mysql_stmt_prepare()創(chuàng)建預處理語句。然后,在調(diào)用mysql_stmt_execute()執(zhí)行語句之前,可采用下述步驟設(shè)置每個臨時參數(shù):
在與數(shù)據(jù)值相關(guān)的MYSQL_BIND結(jié)構(gòu)中,將buffer_type成員設(shè)置為相應(yīng)的類型,該類型指明了發(fā)送的臨時值類型。對于DATE、TIME、DATETIME或TIMESTAMP值,將buffer_type分別設(shè)置為MYSQL_TYPE_DATE、MYSQL_TYPE_TIME、MYSQL_TYPE_DATETIME或MYSQL_TYPE_TIMESTAMP。
將MYSQL_BIND結(jié)構(gòu)的緩沖成員設(shè)置為用于傳遞臨時值的MYSQL_TIME結(jié)構(gòu)的地址。
填充MYSQL_TIME結(jié)構(gòu)的成員,使之與打算傳遞的臨時支的類型相符。
使用mysql_stmt_bind_param()將參數(shù)數(shù)據(jù)綁定到語句。然后可調(diào)用mysql_stmt_execute()。
要想檢索臨時值,可采用類似的步驟,但應(yīng)將buffer_type成員設(shè)置為打算接受的值的類型,并將緩沖成員設(shè)為應(yīng)將返回值置于其中的MYSQL_TIME結(jié)構(gòu)的地址。調(diào)用mysql_stmt_execute()之后,并在獲取結(jié)果之前,使用mysql_bind_results()將緩沖綁定到語句上。
具體看代碼:
#include?<stdio.h> #include?<stdlib.h> #include?<string.h> #include?<dlfcn.h> #include?<mysql> #include?<stdio.h> #include?<stdlib.h> #include?<unistd.h> #include?<string.h> #include?<errno.h> #include?<termios.h> #include?<mysql> int?main() { ????int?????????ret?=?0,?status?=?0; ????MYSQL???????*mysql; ????MYSQL_RES???*result; ????mysql?=mysql_init(NULL); ????mysql?=mysql_real_connect(mysql,?"localhost",?"root",?"123456",?"mydb2",?0,?NULL,?CLIENT_MULTI_STATEMENTS?); ????if?(mysql?==?NULL) ????{ ????????ret?=?mysql_errno(mysql); ????????printf("%s",?mysql_error(mysql)); ????????printf("func?mysql_real_connect()?err?:%dn",?ret); ????????return?ret; ????} ????else ????{ ????????printf("?ok......n"); ????} ????MYSQL_TIME??ts; ????MYSQL_BIND??bind[3]; ????MYSQL_STMT??*stmt; ?????//注意: ?????//?創(chuàng)建的表語句 ?????//?create?table?test_table?(date_field?date,??time_field?time,??timestamp_field?timestamp?); ????char?query[1024]?=?"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?memoryn"); ????????exit(0); ????} ????if?(mysql_stmt_prepare(stmt,?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); ????//?Close?the?statement?// ????if?(mysql_stmt_close(stmt)) ????{ ??????fprintf(stderr,?"?failed?while?closing?the?statementn"); ??????fprintf(stderr,?"?%sn",?mysql_stmt_error(stmt)); ??????exit(0); ????} ????mysql_close(mysql); }</mysql></termios.h></errno.h></string.h></unistd.h></stdlib.h></stdio.h></mysql></dlfcn.h></string.h></stdlib.h></stdio.h>
以上就是MySQL入門之時間相關(guān)函數(shù)的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.php.cn)!