バイナリー(準備されたステートメント)プロトコールはあなたに、日付値とタイム値(DATE
、TIME
、DATETIME
およびTIMESTAMP
)を、MYSQL_TIME
構造を使って、送り且つ受け取ることを許します。この構造のメンバーは項23.2.5. 「準備されたC APIステートメントデータタイプ」で記述されます。
時間のデータ値を送るため、mysql_stmt_prepare()
を使って準備されたステートメントを生成してください。その後、mysql_stmt_execute()
を呼び出して、ステートメントを実行する前に、以下の手順を実行して各時間パラメータをセットしてください。
データ値を関連するMYSQL_BIND
構造の中に、buffer_type
メンバーを、送ろうとしている時間値の種類を示すタイプにセットしてください。DATE
値、TIME
値、DATETIME
値またはTIMESTAMP
値に対して、buffer_type
をMYSQL_TYPE_DATE
、MYSQL_TYPE_TIME
、MYSQL_TYPE_DATETIME
またはMYSQL_TYPE_TIMESTAMP
にそれぞれセットしてください。
MYSQL_BIND
構想のbuffer
メンバーを、時間値を渡すMYSQL_TIME
構造のアドレスにセットしてください。
渡すべき時間値のタイプに適した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); ..