注意: プリペアドステートメントの API は、今後改訂される可能性があります。ここで説明する情報は、すぐにこの API を使用する開発者向けに書かれていますが、今後 API が変更になる可能性があることをご承知おきください。
プリペアドステートメントは、主に
MYSQL_STMT
および
MYSQL_BIND
の各データ構造体を使用します。その他に、時間的なデータを転送するために
MYSQL_TIME
を使用します。
この構造体は、プリペアドステートメントを表す。プリペアドステートメントは、mysql_prepare()
を呼び出して作成する。この関数は、MYSQL_STMT
へのポインタであるステートメントハンドルを返す。このハンドルは、その後に呼び出されるすべてのステートメント関連の関数で使用される。
MYSQL_STMT
構造体のメンバをアプリケーションが使用することはない。
1 つの接続に複数のステートメントハンドルを関連付けることができる。関連付けるハンドル数は、使用できるシステムリソースによって制限される。
この構造体は、クエリの入力(データ値がサーバに送信される)および出力(結果値がサーバから返される)の両方で使用される。入力の場合、mysql_bind_param()
に渡してパラメータデータ値をバッファにバインドし、mysql_execute()
が使用できるようにする。出力の場合、mysql_bind_result()
に渡して結果セットをバッファにバインドし、mysql_fetch()
でレコードを取得する際に使用できるようにする。
MYSQL_BIND
構造体では、以下に示すメンバをアプリケーションプログラムが使用できる。どのメンバも入力および出力のどちらにも使用するが、データ転送の方向によって異なる目的で使用する場合がある。
enum enum_field_types buffer_type
バッファの型。使用できる
buffer_type
の値のリストを、このセクションの後半に示す。入力の場合、buffer_type
はクエリパラメータにバインドする値の型を表す。出力の場合、結果セットのバッファで受け取る値の型を表す。
void *buffer
入力の場合、クエリパラメータのデータ値が保存されるバッファへのポインタ。出力の場合、結果セットのカラム値を返すバッファへのポインタ。カラム型が数値の場合、buffer
は適切な C
言語の型の変数へのポインタとする必要がある(UNSIGNED
属性を持つカラムに変数を関連付けている場合、変数は
C 言語の unsigned
型とする必要がある)。カラム型が日付および時刻の場合、buffer
は MYSQL_TIME
構造体へのポインタとする必要がある。カラム型が文字列およびバイナリ文字列の場合、buffer
は文字バッファへのポインタとする必要がある。
unsigned long buffer_length
バイト単位で表した *buffer
の実際のサイズ。この値は、バッファに格納できるデータの最大サイズを示す。C
の文字データおよびバイナリデータの場合、buffer_length
の値は、mysql_bind_param()
で使用する場合は *buffer
が示すデータの長さ、または
mysql_bind_result()
で使用する場合はバッファに取得できる最大データバイト数を指定する。
unsigned long *length
unsigned long
変数へのポインタ。*buffer
に格納するデータの実際のバイト数を示す。length
は、格納するデータが C
の文字データまたはバイナリデータの場合に使用する。入力パラメータデータをバインドする場合、length
は、*buffer
に格納するパラメータ値の長さを示す
unsigned long
変数を指す。これは
mysql_execute()
で使用される。length
がヌルポインタの場合、プロトコルはすべての文字データおよびバイナリデータがヌルで終端されていると仮定する。出力値をバインドする場合、mysql_fetch()
は、返すデータのカラム値の長さを
length
がポイントする変数に設定する。
数値データ型または時間的なデータ型の場合、データ値の長さは
buffer_type
の値によって決まるので、length
は無視される。
my_bool *is_null
my_bool
変数へのポインタ。値が
NULL
の場合は
true、NULL
以外の場合は
false。入力の場合、*is_null
を true
に設定することによって、クエリパラメータとして
NULL
値を渡していることを示す。出力の場合、クエリが返す値が
NULL
のときにレコードを取得すると、この値が
true に設定される。
この構造体は、サーバと直接
DATE
、TIME
、DATETIME
、および
TIMESTAMP
データを送受信するために使用する。それには、MYSQL_BIND
構造体の buffer_type
メンバをいずれかの時間を表す型に設定し、buffer
メンバを MYSQL_TIME
構造体をポイントするように設定する。
MYSQL_TIME
構造体のメンバを以下に示す。
unsigned int year
年。
unsigned int month
月。
unsigned int day
日。
unsigned int hour
時。
unsigned int minute
分。
unsigned int second
秒。
my_bool neg
時間が負かどうかを示すブール値フラグ。
unsigned long second_part
秒の小数部。現在は未使用。
MYSQL_TIME
構造体のメンバは、使用する時間的な型に対応する部分だけが使用される。year
、month
、および
day
の各メンバは、DATE
、DATETIME
、および
TIMESTAMP
の値に使用する。hour
、minute
、および
second
の各メンバは、TIME
、DATETIME
、および
TIMESTAMP
の値に使用する。 See
項11.1.9. 「C API における日付値および時刻値の取り扱い」。
MYSQL_BIND
構造体の
buffer_type
メンバに指定できる値を以下の表に示します。この表には、それぞれの
buffer_type
の値に最も近い SQL
のデータ型を示し、さらに数値型と時間的な値の型については対応する
C のデータ型も示します。
buffer_type 値
|
SQL のデータ型 | C のデータ型 |
MYSQL_TYPE_TINY |
TINYINT |
char |
MYSQL_TYPE_SHORT |
SMALLINT |
short int |
MYSQL_TYPE_LONG |
INT |
long int |
MYSQL_TYPE_LONGLONG |
BIGINT |
long long int |
MYSQL_TYPE_FLOAT |
FLOAT |
float |
MYSQL_TYPE_DOUBLE |
DOUBLE |
double |
MYSQL_TYPE_TIME |
TIME |
MYSQL_TIME |
MYSQL_TYPE_DATE |
DATE |
MYSQL_TIME |
MYSQL_TYPE_DATETIME |
DATETIME |
MYSQL_TIME |
MYSQL_TYPE_TIMESTAMP |
TIMESTAMP |
MYSQL_TIME |
MYSQL_TYPE_STRING |
CHAR |
|
MYSQL_TYPE_VAR_STRING |
VARCHAR |
|
MYSQL_TYPE_TINY_BLOB |
TINYBLOB/TINYTEXT |
|
MYSQL_TYPE_BLOB |
BLOB/TEXT |
|
MYSQL_TYPE_MEDIUM_BLOB |
MEDIUMBLOB/MEDIUMTEXT |
|
MYSQL_TYPE_LONG_BLOB |
LONGBLOB/LONGTEXT |
暗黙のデータ型変換はどちらの方向にも行われる可能性があります。
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.