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
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.