無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 23 APIとライブラリー :: 23.2 MySQL C API :: 23.2.10 日付とタイム値のC API式取り扱い
« 23.2.9 マルチプルステートメントを実行するC APIハンドリング

23.2.11 C APIスレッド機能の説明 »
Section Navigation      [Toggle]
  • 23.2 MySQL C API
  • 23.2.1 C APIデータタイプ
  • 23.2.2 C API機能の概要。
  • 23.2.3 C API機能の説明
  • 23.2.4 準備されたC APIステートメント。
  • 23.2.5 準備されたC APIステートメントデータタイプ
  • 23.2.6 準備されたC APIステートメント機能の概要
  • 23.2.7 準備されたC APIステートメント機能の詳細
  • 23.2.8 準備されたC API ステートメントの問題
  • 23.2.9 マルチプルステートメントを実行するC APIハンドリング
  • 23.2.10 日付とタイム値のC API式取り扱い
  • 23.2.11 C APIスレッド機能の説明
  • 23.2.12 埋め込まれたC API機能の説明
  • 23.2.13 自動再接続挙動の管理
  • 23.2.14 C APIを使うときよく尋ねられる質問と問題
  • 23.2.15 クライアントプログラムの構築
  • 23.2.16 スレッド付きクライアントを作る方法

23.2.10. 日付とタイム値のC API式取り扱い

バイナリー(準備されたステートメント)プロトコールはあなたに、日付値とタイム値(DATE、TIME、DATETIMEおよびTIMESTAMP)を、MYSQL_TIME構造を使って、送り且つ受け取ることを許します。この構造のメンバーは項23.2.5. 「準備されたC APIステートメントデータタイプ」で記述されます。

時間のデータ値を送るため、mysql_stmt_prepare()を使って準備されたステートメントを生成してください。その後、mysql_stmt_execute()を呼び出して、ステートメントを実行する前に、以下の手順を実行して各時間パラメータをセットしてください。

  1. データ値を関連するMYSQL_BIND構造の中に、buffer_typeメンバーを、送ろうとしている時間値の種類を示すタイプにセットしてください。DATE値、TIME値、DATETIME値またはTIMESTAMP値に対して、buffer_typeをMYSQL_TYPE_DATE、MYSQL_TYPE_TIME、MYSQL_TYPE_DATETIMEまたはMYSQL_TYPE_TIMESTAMPにそれぞれセットしてください。

  2. MYSQL_BIND構想のbufferメンバーを、時間値を渡すMYSQL_TIME構造のアドレスにセットしてください。

  3. 渡すべき時間値のタイプに適したMYSQL_TIME構造のメンバーを書き込んでください。

mysql_stmt_bind_param()を使ってパラメータデータをステートメントに固定(バインド)してください。こうすると、mysql_stmt_execute()を呼び出すことが可能になります。

時間値を復元する手順は、buffer_typeメンバーを受け取りを期待する値のタイプにセットし更に、bufferメンバーを戻り値を置くべきMYSQL_TIME構造のアドレスにセットする以外、同じです。mysql_stmt_execute()を呼び出した後、結果をフェッチする前に、バッファーをステートメントに固定(バインド)するmysql_bind_results()を使ってください。

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_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);
  ..

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.