MySQL 4.1
で導入された新しいバイナリプロトコルを使用すると、MYSQL_TIME
構造体を使用して日付および時刻に関する値(DATE
、TIME
、DATETIME
、および
TIMESTAMP
)を送受信できます。この構造体のメンバについては、項11.1.5. 「C API のプリペアドステートメントのデータ型」
を参照してください。
時間的なデータを送信するには、mysql_prepare()
を使用してプリペアドステートメントを作成します。次に
mysql_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_bind_param()
を使用してパラメータデータをステートメントにバインドします。これで
mysql_execute()
を呼び出す準備が完了します。
時間的な値を取得する手順はほとんど同じですが、buffer_type
メンバには取得しようとする値の型を設定する点、および
buffer
メンバには返される値を格納する
MYSQL_TIME
構造体のアドレスを設定する点が異なります。mysql_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_prepare(mysql, query, strlen(query))); /* setup 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_bind_param(stmt, bind); /* supply the data to be sent is the ts structure */ ts.year= 2002; ts.month= 02; ts.day= 03; ts.hour= 10; ts.minute= 45; ts.second= 20; mysql_execute(stmt); ..
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.