無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 23 APIとライブラリー :: 23.2 MySQL C API :: 23.2.1 C APIデータタイプ
« 23.2 MySQL C API

23.2.2 C API機能の概要。 »
Section Navigation      [Toggle]
  • 23.2 MySQL C API
  • 23.2.1 C APIデータタイプ
  • 23.2.2 C API機能の概要。
  • 23.2.3 C API機能の説明
  • 23.2.4 準備されたC APIステートメント。
  • 23.2.5 準備されたC APIステートメントデータタイプ
  • 23.2.6 準備されたC APIステートメント機能の概要
  • 23.2.7 準備されたC APIステートメント機能の詳細
  • 23.2.8 準備されたC API ステートメントの問題
  • 23.2.9 マルチプルステートメントを実行するC APIハンドリング
  • 23.2.10 日付とタイム値のC API式取り扱い
  • 23.2.11 C APIスレッド機能の説明
  • 23.2.12 埋め込まれたC API機能の説明
  • 23.2.13 自動再接続挙動の管理
  • 23.2.14 C APIを使うときよく尋ねられる質問と問題
  • 23.2.15 クライアントプログラムの構築
  • 23.2.16 スレッド付きクライアントを作る方法

23.2.1. C APIデータタイプ

  • MYSQL

    この構造は1データベース接続に対するハンドルを表します。それは殆ど全てのMySQL機能に対して使われます。MYSQL 構造のコピーを作ろうとすべきではありません。このようなコピーが使用可能である保証はありません。

  • MYSQL_RES

    この構造は横列(SELECT、SHOW、DESCRIBE、EXPLAIN)を戻すクエリーの結果を表します。クエリーから返された情報はこのセクションの残りの部分の中で結果セットと呼ばれます。

  • MYSQL_ROW

    これはデータの1本の横列に関して、タイプに安全な表現です。それは現在カウントされたバイトストリングのアレーとして搭載されています。(フィールド値にバイナリーデータが含まれている場合、内部に無効なバイトが含まれている恐れがあるので、これらをゼロで終わるストリングとして扱うことはできません。)横列は mysql_fetch_row() を呼び出すことによって得られます。

  • MYSQL_FIELD

    この構造には、フィールド名、タイプ並びにサイズのようなフィールドに関する情報が含まれています。ここで、その中身(メンバー)について明細に説明します。繰り返して mysql_fetch_field() を呼び出すことによって、各フィールドごとに、MYSQL_FIELD構造を得ることができます。フィールド値はこの構造の一部ではありません; これらは MYSQL_ROW 構造の中に含まれています。

  • MYSQL_FIELD_OFFSET

    これは、MySQLフィールドリストの中に入力してもタイプに安全なオフセットの表示です。(mysql_field_seek() によって使われた。.)オフセットは列の中でゼロで始まるフィールドナンバーです。

  • my_ulonglong

    横列の数および mysql_affected_rows()、mysql_num_rows() と mysql_insert_id() に使ったタイプ。このタイプは、0 から 1.84e19 までの範囲を提供します。

    幾つかのシステム上では、タイプ my_ulonglong の値をプリントしようと試みる動作は作動しません。このような値をプリントするには、それを unsigned long に変換して、%lu 印刷フォーマットを使ってください。例 :

    printf ("Number of rows: %lu\n", 
            (unsigned long) mysql_num_rows(result));
    
  • my_bool

    (ゼロでない)真または(ゼロの)虚の値に対するブーリアンタイプ。

MYSQL_FIELD 構造には、ここで列記したメンバーが含まれています:

  • char * name

    ゼロで終わるストリングを含むフィールドの名称。フィールドに AS クローズを含むアリアスを附与すると、name はアリアスとなります。

  • char * org_name

    ゼロで終わるストリングを含むフィールドの名称。アリアスは無視されます。

  • char * table

    それが計算フィールドでない場合、このフィールドを含むテーブルの名称。計算されたフィールドの場合、table 値は空のストリングとなります。カラムが画面から選択される場合、table は画面を指定します。テーブルあるいは画面に AS クローズを使ってエイリアスを附与すると、table の値はエイリアスとなります。

  • char * org_table

    ゼロで終わるストリングを含むテーブルの名称。エイリアスは無視されます。カラムを画面から選ぶと、org_table が基盤となるテーブルを指定します。

  • char * db

    ゼロで終わるストリングとして、フィールドを生むデータベースの名称。フィールドが計算フィールドである場合、db は空のストリングとなります。

  • char * catalog

    カタログ名。この価値は常に "def" となります。

  • char * def

    ゼロで終わるストリングを含むこのフィールドのデフォルト値。mysql_list_fields() を使う場合に限り、これはセットされます。

  • unsigned long length

    テーブルの定義に規定したフィールドの幅。

  • unsigned long max_length

    結果セットに対するフィールドの最大幅(結果セット中に実在する列に対する最長フィールド値の長さ)。mysql_store_result() あるいは mysql_list_fields() を使う場合、これにはフィールドに対する最大長さが含まれます。mysql_use_result() を使うと、この変数の値はゼロになります。

    max_length の値は、結果セット中の値のストリング表示の長さとなります。例えば、FLOATカラムを復元する場合にあって、「widest」値が-12.345ある場合、max_lengthは('-12.345'の長さに等しい)7となります。

    準備されたステートメントを使っている場合、バイナリのプロトコルに対して、値の長さは結果セット中の値のタイプによって変わるので、max_lengthは初期設定されません。(項23.2.5. 「準備されたC APIステートメントデータタイプ」を参照してください。)max_length値がとにかく欲しい場合、mysql_stmt_attr_set()を使って、STMT_ATTR_UPDATE_MAX_LENGTHオプションを有効化すると、mysql_stmt_store_result()を呼び出す時、その長さがセットされます。(項23.2.7.3. 「mysql_stmt_attr_set()」と項23.2.7.27. 「mysql_stmt_store_result()」をご参照ください。)

  • unsigned int name_length

    nameの長さ。

  • unsigned int org_name_length

    org_nameの長さ。

  • unsigned int table_length

    tableの長さ。

  • unsigned int org_table_length

    org_tableの長さ。

  • unsigned int db_length

    dbの長さ。

  • unsigned int catalog_length

    catalogの長さ。

  • unsigned int def_length

    defの長さ。

  • unsigned int flags

    フィールドに異なるビットフラグ。flags値を次のビットセットに関してゼロ以上にすることができます:

    フラグ値 フラグの説明
    NOT_NULL_FLAG フィールドはNULL
    であることができませんPRI_KEY_FLAG フィールドはプライマリーキーの一部です
    UNIQUE_KEY_FLAG フィールドはユニークキーの一部です
    MULTIPLE_KEY_FLAG フィールドは非ユニークキーの一部です
    UNSIGNED_FLAG フィールドにはUNSIGNED属性が含まれています
    ZEROFILL_FLAG フィールドにはZEROFILL属性が含まれています
    BINARY_FLAG フィールドにはBINARY 属性が含まれています
    AUTO_INCREMENT_FLAG フィールドにはAUTO_INCREMENT 属性が含まれています
    ENUM_FLAG フィールドはENUM (deprecated)です
    SET_FLAG フィールドはSET (deprecated)です
    BLOB_FLAG フィールドはBLOBまたはTEXT (deprecated)です
    TIMESTAMP_FLAG フィールドはTIMESTAMP (deprecated)です

    BLOB_FLAGフラグ、ENUM_FLAGフラグ、SET_FLAGフラグおよびTIMESTAMP_FLAGフラグの使用は、それらはそのタイプではなく、フィールドのタイプを表示するので、けなされます。field->typeを、MYSQL_TYPE_BLOB、MYSQL_TYPE_ENUM、MYSQL_TYPE_SETもしくは代わりにMYSQL_TYPE_TIMESTAMPに対して出来るだけテストしてください。

    次の例はflags値の典型的な利用を図解したものです:

    if (field->flags & NOT_NULL_FLAG)
        printf("Field can't be null\n");
    

    flags値のブーリアン・ステータス決定するため、次の便利なマクロを使うことができます:

    フラグのステータス 摘要
    IS_NOT_NULL(フラグ) このフィールドがNOT NULL
    IS_PRI_KEY(フラグ)であると規定されている場合、真 このフィールドがプライマリーキーである場合、真
    IS_BLOB(フラグ) であると規定されている場合、真 このフィールドがBLOBまたはTEXT (deprecated; test field->type instead)である場合、真
  • unsigned int decimals

    数値フィールドに対する小数の数。

  • unsigned int charsetnr

    フィールドに対するキャラクター・セットナンバー。

  • enum enum_field_types タイプ

    フィールドのタイプ。type値は次のテーブルに示すMYSQL_TYPE_シンボルの1つにすることができます。

    タイプの値 タイプの説明
    MYSQL_TYPE_TINY TINYINT フィールド
    MYSQL_TYPE_SHORT SMALLINT フィールド
    MYSQL_TYPE_LONG INTEGER フィールド
    MYSQL_TYPE_INT24 MEDIUMINT フィールド
    MYSQL_TYPE_LONGLONG BIGINT フィールド
    MYSQL_TYPE_DECIMAL DECIMAL または NUMERIC フィールド
    MYSQL_TYPE_NEWDECIMAL 精密計算 DECIMAL または NUMERIC
    MYSQL_TYPE_FLOAT FLOAT フィールド
    MYSQL_TYPE_DOUBLE DOUBLE or REAL フィールド
    MYSQL_TYPE_BIT BIT フィールド
    MYSQL_TYPE_TIMESTAMP TIMESTAMP フィールド
    MYSQL_TYPE_DATE DATE フィールド
    MYSQL_TYPE_TIME TIME フィールド
    MYSQL_TYPE_DATETIME DATETIME フィールド
    MYSQL_TYPE_YEAR YEAR フィールド
    MYSQL_TYPE_STRING CHAR または BINARY フィールド
    MYSQL_TYPE_VAR_STRING VARCHAR または VARBINARY フィールド
    MYSQL_TYPE_BLOB BLOB or TEXT フィールド (大長を決めるためにmax_lengthを使用)
    MYSQL_TYPE_SET SET フィールド
    MYSQL_TYPE_ENUM ENUM フィールド
    MYSQL_TYPE_GEOMETRY 空間フィールド
    MYSQL_TYPE_NULL NULL-type field

    フィールドが数値のタイプを持っているかどうか試すためにIS_NUM()マクロを使うことができます。type値をIS_NUM()に渡しください。そうすると、フィールドが数値である場合、それが真であると判定します。

    if (IS_NUM(field->type))
        printf("Field is numeric\n");
    

    ストリングデータタイプに対して、バイナリーデータであるか、非バイナリーデータであるかを区別するには、charsetnr値が63であるかどうか調べてください。もしそうであるなら、キャラクターセットはbinaryで、それは非バイナリーデータでなくバイナリーデータであることを示します。これが、BINARYとCHAR、VARBINARYとVARCHAR並びにBLOBとTEXT.を区別する方法です。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.