MySQL入門之時間相關(guān)函數(shù)

二進制協(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?*)&amp;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)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊10 分享