Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


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

23.8.19 C API プリペアドステートメントの日時値の処理

バイナリ (プリペアドステートメント) プロトコルにより、MYSQL_TIME 構造を使用して、日時値 (DATETIMEDATETIME、および TIMESTAMP) を送受信できます。この構造のメンバーについては、セクション23.8.9「C API プリペアドステートメントデータ構造」で説明しています。

時間データ値を送信するには、mysql_stmt_prepare() を使用して、プリペアドステートメントを作成します。その後、mysql_stmt_execute() を呼び出して、ステートメントを実行する前に、次の手順を使用して、各時間パラメータを設定します。

  1. データ値に関連付けられている MYSQL_BIND 構造で、buffer_type メンバーを、送信する時間値の種類を示す型に設定します。DATETIMEDATETIME、または TIMESTAMP 値で、buffer_typeMYSQL_TYPE_DATEMYSQL_TYPE_TIMEMYSQL_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_bind_result() を使用して、mysql_stmt_execute() を呼び出したあと、かつ結果をフェッチする前にステートメントにバッファーをバインドします。

これは DATETIME、および 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);
  ..

User Comments
Sign Up Login You must be logged in to post a comment.