3.6.3日期和时间值的预处理语句处理

二进制(预处理语句)协议使您能够发送和接收日期和时间值(日期时间DATETIME,时间戳),使用MYSQL_TIME结构。该结构的成员在第6.2节,“C API预处理语句数据结构”

若要发送时态数据值,请使用mysql_stmt_prepare ().然后,在调用之前mysql_stmt_execute ()要执行该语句,请使用以下步骤设置每个时态参数:

  1. MYSQL_BIND结构关联的数据值,则设置buffer_type成员的类型,该类型指示要发送的时态值的类型。为日期时间DATETIME,或时间戳值,设置buffer_typeMYSQL_TYPE_DATEMYSQL_TYPE_TIMEMYSQL_TYPE_DATETIME,或MYSQL_TYPE_TIMESTAMP,分别。

  2. 设置缓冲的成员MYSQL_BIND结构的地址MYSQL_TIME结构,在其中传递时态值。

  3. 的成员MYSQL_TIME结构,这些结构适用于要传递的时态值的类型。

使用mysql_stmt_bind_param ()将参数数据绑定到语句。然后你可以打电话给mysql_stmt_execute ()

检索时态值的过程与此类似,只是您设置了buffer_type成员添加到期望接收的值的类型缓冲的地址MYSQL_TIME结构,返回值应放置在其中。使用mysql_stmt_bind_result ()在调用后将缓冲区绑定到语句mysql_stmt_execute ()在获取结果之前。

下面是一个插入的简单示例日期时间,时间戳数据。的mysql变量被假定为有效的连接处理程序。

MYSQL_TIME ts;MYSQL_BIND绑定[3];MYSQL_STMT *支撑;strmov(查询,"INSERT INTO test_table(date_field, time_field, \ timestamp_field) VALUES(?,?,?");支撑= mysql_stmt_init (mysql);If (!stmt) {fprintf(stderr, " mysql_stmt_init(),内存不足\n");退出(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));退出(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); ..