10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册

MySQL 5.6リファレンスマニュアル/.../ C APIプリペアドステ,トメントの日時値の処理

23.7.19 c APIプリペアドステ,トメントの日時値の処理

バナリ(プリペアドステトメント)プロトコルにより,MYSQL_TIME構造を使用して、日時値(日期时间DATETIME,および时间戳)を送受信できます。この構造のメンバにいては,セクション23.7.9 " 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(), out of memory\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); ..