C言語でのMySQLインターフェースの詳細な説明

MySQLインターフェースをC言語に導入する

mysql_character_set_name()
  • const char * mysql_character_set_name(MYSQL * mysql)
  • 現在の接続のデフォルトの文字セットを返します
  • 戻り値:デフォルトの文字セット
mysql_close()
  • void mysql_close(MYSQL * mysql)
  • 説明:以前に開いた接続を閉じます。ハンドルがmysql_init()またはmysql_connect()によって自動的に割り当てられた場合、mysql_close()はmysqlが指す接続ハンドルの割り当ても解除します。
mysql_data_seek()
  • void mysql_data_seek(MYSQL_RES *結果、my_ulonglongオフセット)
  • クエリ結果セットで任意の行を検索します。オフセット値は、0からmysql_num_rows(result)-1までの範囲の行番号です。
  • この関数では、結果セット構造にクエリのすべての結果が含まれている必要があります。そのため、mysql_data_seek()は、mysql_use_result()ではなくmysql_store_result()と組み合わせてのみ使用する必要があります。
mysql_errno()
  • unsigned int mysql_errno(MYSQL * mysql)
  • mysqlによって指定された接続の場合、mysql_errno()は、最後に呼び出されたAPI関数のエラーコードを返します。これは成功した場合と成功しなかった場合があります。
  • 戻り値「0」は、エラーが発生しなかったことを示します。
  • 失敗すると、最後のmysql_xxx()呼び出しのエラーコードを返します。
mysql_error()
  • const char * mysql_error(MYSQL * mysql)
  • mysqlによって指定された接続の場合、mysql_error()は、失敗した最後に呼び出されたAPI関数のエラーメッセージを含むNULLで終了する文字列を返します。
  • 関数が失敗しない場合、mysql_error()の戻り値は前のエラーか、エラーがないことを示す空の文字列である可能性があります。
mysql_fetch_field()
  • MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *結果)

  • MYSQL_FIELD構造体の結果セットの列を返します。この関数を繰り返し呼び出して、結果セットのすべての列に関する情報を取得します。フィールドが残っていない場合、mysql_fetch_field()はNULLを返します。

  • 新しいSELECTクエリが実行されるたびに、mysql_fetch_field()がリセットされ、最初のフィールドに関する情報が返されます。

  • mysql_field_seek()の呼び出しは、mysql_fetch_field()によって返されるフィールドにも影響します。

  • 現在の列のMYSQL_FIELD構造。列が残っていない場合はNULLを返します。

  • 注:テーブルに対してSELECTを実行するためにmysql_query()が呼び出されたが、mysql_store_result()が呼び出されなかった場合、BLOBフィールドの長さを要求するためにmysql_fetch_field()が呼び出された場合、MYSQLはデフォルトのblob長(8KB)を返します。

    MYSQL_FIELD*フィールド;
    while(field = mysql_fetch_field(result))
    printf( "field name%s
    "、field-> name);//各列のフィールド名を出力します

mysql_fetch_fields()
  • MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *結果)

  • 結果セットの場合、すべてのMYSQL_FIELD構造体の配列を返します。各構造は、結果セットの1列のフィールド定義を提供します

  • 戻り値:結果セットのすべての列のMYSQL_FIELD構造体の配列。

    unsigned int num_fields;
    unsigned int i;
    MYSQL_FIELD* fields;
    
    num_fields = mysql_num_fields(res);
    fields = mysql_fetch_field(res);
    for (i = 0; i < num_fields; ++i)
    	printf("Field %u is %s
    

    "、i、fields [i] .name);

mysql_fetch_lengths()
  • unsigned long * mysql_fetch_lengths(MYSQL_RES * result)

  • 結果セットの現在の行の列の長さを返します。

  • 結果セットにバイナリデータが含まれている場合、strlen()はNULL文字を含むフィールドに対して誤った結果を返すため、この関数を使用してデータのサイズを決定する必要があります。

  • 戻り値:各列のサイズを表す符号なし長整数の配列(終了NULL文字なし)。エラーがある場合は、NULLを返します

    MYSQL_ROW row;
    unsigned long *lengths;
    unsigned int num_fields;
    unsigned int i;
    
    mysql_data_seek(res, 1);
    
    row = mysql_fetch_row(res);
    if (row)
    {
    	num_fields = mysql_num_fields(res);
    	lengths = mysql_fetch_lengths(res);
    
    	for (i = 0; i < num_fields; ++i)
    		printf("Column %u is %lu bytes in length.
    

    "、i、lengths [i]);
    }

mysql_fetch_row()
  • MYSQL_ROW mysql_fetch_row(MYSQL_RES *結果)

  • 結果セットの次の行を取得します。mysql_store_result()の後に使用すると、取得する行がない場合、mysql_fetch_row()はNULLを返します。

  • インライン値の数はmysql_num_fields(result)で指定されます。行がmysql_fetch_row()の呼び出しによって返された値を保持している場合、それらの値へのポインターは、row[0]からrow[mysql_num_fields(result)-1]としてアクセスされます。行のNULL値は、NULLポインターによって示されます。

  • 行のフィールド値の長さは、mysql_fetch_lengths()を呼び出すことで取得できます。空のフィールドとNULLを含むフィールドの場合、長さは0です。フィールド値へのポインターを調べることにより、それらを区別できます。ポインタがNULLの場合、フィールドはNULLです。それ以外の場合、フィールドは空です。

  • 戻り値:次の行のMYSQL_ROW構造体。取得する行がこれ以上ないか、エラーが発生した場合はNULL。

    MYSQL_ROW行;
    unsigned int num_fields;
    unsigned int i;

    num_fields = mysql_num_fields(result);
    while(row = mysql_fetch_row(result))
    { unsigned long * lengths; 長さ=mysql_fetch_lengths(result); for(i = 0; i <num_fields; ++ i)printf( "[%。* s]"、(int)lengths [i]、row [i]?row [i]: "NULL"); printf( ” "); }






mysql_field_count()
  • unsigned int mysql_field_count(MYSQL * mysql)
  • 結合に作用する最新のクエリの列数を返します
  • この関数の通常の使用法は、mysql_store_result()がNULLを返す場合です(したがって、結果セットのポインターはありません)。この場合、mysql_field_count()を呼び出して、mysql_store_result()がnull以外の結果を生成するかどうかを判別できます。このようにして、クライアントは、クエリがSELECT(またはSELECTのような)ステートメントであるかどうかを知らなくても、適切なアクションを実行できます。
mysql_field_seek()
  • MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *結果、MYSQL_FIELD_OFFSETオフセット)
  • フィールドカーソルを指定されたオフセットに設定します。mysql_fetch_field()を次に呼び出すと、そのオフセットに関連付けられている列定義が取得されます。
  • 行の先頭を見つけるには、オフセット0を渡します。
  • 戻り値:フィールドカーソルの前の値。
mysql_field_tell()
  • MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *結果)
  • カーソルの現在のオフセットを返します
mysql_free_result()
  • 結果セットに割り当てられたメモリを解放します。結果セットの操作が完了したら、mysql_free_result()を呼び出して、結果セットで使用されているメモリを解放する必要があります。
  • リリースが完了した後は、結果セットにアクセスしようとしないでください
mysql_get_character_set_info()
  • void mysql_get_character_set_info(MYSQL * mysql、MY_CHARSET_INFO * cs)
  • この関数は、デフォルトのクライアント文字セットに関する情報を提供します。デフォルトの文字セットは、mysql_set_character_set()関数を使用して変更できます。
mysql_init()
  • MYSQL * mysql_init(MYSQL * mysql)
  • mysql_real_connect()に適したMYSQLオブジェクトを割り当てまたは初期化します。mysqlがNULLポインターの場合、この関数は新しいオブジェクトを割り当て、初期化し、返します。それ以外の場合、オブジェクトは初期化され、オブジェクトのアドレスが返されます。
  • mysql_init()が新しいオブジェクトを割り当てた場合、mysql_close()が呼び出されて接続が閉じられます。オブジェクトが解放されます。
  • 戻り値:初期化されたMYSQL*ハンドル。新しいオブジェクトを割り当てるのに十分なメモリがない場合は、NULLを返します。
mysql_list_dbs()
  • MYSQL_RES * mysql_list_dbs(MYSQL_mysql、const char_wild)
  • ワイルドカードパラメータで指定された単純な正規表現に一致するサーバー上のデータベース名で構成される結果セットを返します。ワイルドカードパラメータには、「%」または「_」を含めることができます。または、すべてのデータベースが一致するようにNULLにすることができます。
  • mysql_list_dbs()を呼び出す方法は、クエリSHOWデータベースを実行するのと似ています。
  • 結果セットはmysql_free_result()で解放する必要があります
  • 戻り値:成功後にMYSQL_RES結果セットを返します。エラーがある場合はNULLを返します。
mysql_list_fields()
  • MYSQL_RES * mysql_list_fields(MYSQL * mysql、const char * table、const char * wild)
  • ワイルドカード引数で指定された単純な正規表現に一致する、指定されたテーブルのフィールド名で構成される結果セットを返します。ワイルドカードパラメータには、ワイルドカード "%"または "_"、またはすべてのフィールドに一致するNULLポインタを含めることができます。
  • mysql_list_fields()メソッドの呼び出しは、クエリSHOW COLUMNSFROMtal_nameの実行に似ています。
  • 戻り値:成功した場合は、MYSQL_RES結果セットを返します。エラーがある場合はNULLを返します。
mysql_list_tables()
  • MYSQL_RES * mysql_list_tables(MYSQL_mysql、const char_wild)
  • 戻り値:ワイルドカードパラメータで指定された単純な正規表現に一致する、現在のデータベース内のテーブル名で構成される結果セットを返します。ワイルドカード引数には、ワイルドカード "%"または "_"、または他のすべてのテーブルと照合するためのNULLポインターを含めることができます。
  • mysql_list_tables()を呼び出す方法は、クエリSHOWテーブルを実行するのと似ています。
  • 戻り値:成功した場合は、MYSQL_RES結果セットを返します。エラーがある場合はNULLを返します。
mysql_num_rows()
  • my_ulonglong mysql_num_rows(MYSQL_RES *結果)
  • 結果セットの行数を返します
  • mysql_store_result()を使用すると、mysql_num_rows()をすぐに呼び出すことができます。
  • mysql_use_result()が使用されている場合、結果セットのすべての行が取得されるまで、mysql_num_rows()は正しい値を返しません。
  • 戻り値:結果セットの行数。
mysql_options()
  • int mysql_options(MYSQL * mysql、enum mysql_option option、const char * arg)
  • 追加の接続オプションを設定し、接続の動作に影響を与えるために使用できます。この関数を複数回呼び出して、いくつかのオプションを設定できます。
  • mysql_options()は、mysql_init()の後、mysql_connect()またはmysql_real_connect()の前に呼び出す必要があります。
  • オプションパラメータは設定するオプションを参照し、Argパラメータはオプションの値です。オプションが整数の場合、argは整数の値を指す必要があります。
  • ここでは可能なオプション値をリストしていません。自分でBaiduを使用できます。
  • 戻り値:成功した場合は0、不明なオプションが使用された場合はゼロ以外。
mysql_ping()
  • int mysql_ping(MYSQL * mysql)
  • サーバーへの接続が機能していることを確認します。作業が失われた場合、再接続が自動的に試行されます。
  • この機能は、長時間アイドル状態になっているクライアントがサーバーが接続を閉じているかどうかを確認し、必要に応じて再接続するために使用できます。
  • 戻り値:サーバーへの接続が有効な場合は0を返し、エラーがある場合はゼロ以外を返します。返されたゼロ以外の値は、MYSQLサーバーが閉じられたかどうかを示すものではなく、ネットワークの問題などの他の理由で接続が終了する可能性があります。
mysql_query()
  • int mysql_query(MYSQL * mysql、const char * query)
  • 「NULLで終了する文字列」クエリが指すSQLクエリを実行します。通常、文字列にはSQLステートメントが含まれている必要があり、ステートメントにセミコロン「;」または「g」を追加しないでください。
  • mysql_query()はバイナリデータを含むクエリには使用できません。バイナリデータには文字 ""が含まれている可能性があるため、代わりにmysql_real_query()を使用する必要があります。これはmysql_query()がクエリ文字列の終わりとして解釈します。
  • クエリが成功した場合は0を返し、エラーが発生した場合はゼロ以外を返します。
mysql_real_connect()
  • MYSQL * mysql_real_connect(MYSQL * mysql、const char * host、const char * user、const char * passwd、const char * db、const char * unix_socket、unsigned long client_flag)
  • mysql_real_connect()は、ホストで実行されているMYSQLデータベースエンジンとの接続を確立しようとします。有効なMYSQL接続ハンドルメカニズムを必要とする他のAPI関数を実行する前に、mysql_real_connect()が正常に完了する必要があります。
  • 最初のパラメーターは、既存のMYSQL構造のアドレスである必要があります。mysql_init()を呼び出して、MYSQL構造を初期化します。
  • 2番目のパラメーターhostの値は、ホスト名またはIPアドレスである必要があります。ホストがNULLまたは文字列「localhost」の場合、接続はローカルホストへの接続として扱われます。オペレーティングシステムがソケットUnixまたはこの名前付きパイプWindowsをサポートしている場合、サーバーへの接続にはTCP/IPの代わりにそれらが使用されます。
  • 3番目のパラメーターuserパラメーターには、ユーザーのMYSQLログインIDが含まれます。userがNULLまたは空の文字列の場合、そのユーザーは現在のユーザーと見なされます。UNIX環境では、これは現在のログイン名です。Windowsでは、現在のユーザー名を指定する必要があります。
  • passwdパラメーターには、ユーザーのパスワードが含まれています。passwdがNULLの場合、そのユーザーのユーザーテーブル(空のパスワードフィールドを持つ)のエントリのみが一致するかどうかがチェックされます。このように、データベース管理者は、ユーザーが指定されたパスワードを持っているかどうかに応じて、特定の方法でMYSQLアクセス許可システムを設定できます。ユーザーは異なるアクセス許可を取得します。
  • 注:mysql_real_connect()を呼び出す前にパスワードを暗号化しようとしないでください。パスワードの暗号化は、クライアントAPIによって自動的に処理されます。
  • 「db」はデータベース名です。dbがNULLの場合、接続はデフォルトのデータベースをこの値に設定します。
  • ポートが0でない場合、その値はTCP/IP接続のポート番号として使用されます。ホストパラメータが接続のタイプを決定することに注意してください。
  • unix_socketがNULLでない場合、この文字列はどのソケットまたは名前付きパイプを使用する必要があるかを示します。注:「host」パラメーターは、接続のタイプを決定します。
  • client_flagの値は通常0ですが、フラグを設定することもできます。私はそれを紹介しません、ただあなた自身でそれをグーグルしてください。
  • 戻り値:接続が成功した場合は、MYSQL*接続ハンドルを返します。接続が失敗した場合はNULLを返します。接続が成功した場合、戻り値は最初のパラメーターの値と同じになります。
mysql_real_query()
  • int mysql_real_query(MYSQL * mysql、const char * query、unsigned long length)
  • 「query」が指すSQLクエリを実行します。これは文字列長バイト「long」でなければなりません。通常、文字列にはSQLステートメントが含まれている必要があり、ステートメントに「;」または「g」を追加しないでください。
  • バイナリデータを含むクエリの場合、バイナリデータには「」文字が含まれる可能性があるため、mysql_query()の代わりにmysql_real_query()を使用する必要があります。また、mysql_real_query()は、クエリ文字列に対してstrlen()を呼び出さないため、mysql_query()よりも高速です。
  • クエリが成功した場合は0を返します。エラーが発生した場合は、ゼロ以外の値が返されます。
mysql_row_seek()
  • MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *結果、MYSQL_ROW_OFFSETオフセット)
  • クエリ結果セットの任意の行に行座標を配置します。offsetは行オフセットであり、mysql_row_tell()またはmysql_row_seek()から返される値である必要があります。値は行番号ではありません。結果セットの行を番号でクエリする場合は、mysql_data_seek()を使用してください。
  • この関数は結果セットにクエリの完全な結果を必要とするため、mysql_row_seek()はmysql_store_result()でのみ使用し、mysql_use_result()では使用しないでください。
  • mysql_row_seek()の後続の使用に渡すことができる行座標の以前の値。
mysql_row_tell()
  • MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *結果)
  • 前のmysql_fetch_row()の場合、カーソルの現在の位置を返します。この値は、mysql_row_seek()の引数として使用できます。
  • mysql_use_result()の後ではなく、mysql_store_result()の後にのみ使用できます。
  • 戻り値:行座標の現在のオフセット
mysql_set_character_set()
  • int mysql_set_character_set(MYSQL * mysql、char * csname)

  • この関数は、現在の接続のデフォルトの文字セットを設定するために使用されます。文字列csnameは、有効な文字セット名を指定します。接続照合は、文字セットのデフォルトの照合になります。

  • 戻り値:0は成功を意味し、ゼロ以外の値はエラーを意味します

    if(!mysql_set_charset_name(&mysql、“ utf8”))
    { printf( "新しいクライアント文字セット:%s "、mysql_character_set_name(&mysql)); }


mysql_shutdown()
  • int mysql_shutdown(MYSQL * mysql、enum enum_shutdown_level shutdown_level)
  • データベースサーバーのシャットダウンを要求します。接続されたユーザーがSHUTDOWN権限を持っていることを確認するため。
  • 戻り値:成功の場合は0、エラーの場合はゼロ以外。
mysql_store_result()
  • MYSQL_RES * mysql_store_result(MYSQL * mysql)
  • データを正常に取得するクエリ(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLEなど)ごとに、mysql_store_result()またはmysql_use_store()を呼び出す必要があります。
  • mysql_store_result()は、クエリの完全な結果をクライアントに読み取り、MYSQL_RES構造体を割り当て、その結果をその構造体に配置します。
  • クエリが結果セットを返さない場合、mysql_store_result()はNULLポインタを返します
  • 結果セットの読み取りに失敗した場合、mysql_store_result()もNULLポインターを返します。mysql_error()が空でない文字列を返し、mysql_errno()がゼロ以外の値を返すかどうかを確認することで、エラーが発生したかどうかを確認できます。
  • 行が返されない場合は、空の結果セットが返されます。(空の結果セット設定は、戻り値としてのnullポインターとは異なります)
  • mysql_store_result()を呼び出して、NULLポインターではない結果を取得したら、mysql_num_rows()を呼び出して、結果セットの行数を調べることができます。
  • mysql_fetch_row()を呼び出して結果セットの行を取得するか、mysql_row_seek()またはmysql_row_tell()を呼び出して結果セットの現在の行位置を取得または設定できます。
  • 結果セットに対する操作が完了したら、mysql_free_result()を呼び出す必要があります。
  • 戻り値:複数の結果を含むMYSQL_RES結果コレクション。エラーがある場合はNULLを返します。
mysql_use_result()
  • MYSQL_RES * mysql_use_result(MYSQL * mysql)
  • mysql_use_resultは結果セットの取得を初期化しますが、mysql_store_result()のように実際には結果セットをクライアントに読み取りません。mysql_fetch_row()の呼び出しを通じて、各行を個別に取得する必要があります。これにより、一時テーブルやローカルバッファに保存せずに、サーバーから直接結果が読み取られます。これは、mysql_store_result()よりも高速でメモリの使用量が少なくなります。クライアントは、現在の回線と通信バッファにのみメモリを割り当てます。
  • mysql_use_result()が使用されている場合、これはサーバーをバインドし、他のスレッドがテーブルを更新するのを防ぎます。
  • mysql_use_result()を使用する場合、NULL値が返されるまでmysql_fetch_row()を実行する必要があります。そうしないと、フェッチされていない行が次の取得の一部として返されます。
  • mysql_data_seek()、mysql_row_seek()、mysql_row_tell()、mysql_num_row()は、mysql_use_result()から返された結果と一緒に使用しないでください。また、mysql_use_result()が完了するまで他のクエリを発行しないでください。
  • 結果セットに対する操作が完了したら、mysql_free_result()を呼び出す必要があります。
とりあえず開発に使っていないインターフェースもありますが、役に立ったら後で更新します。

おすすめ

転載: blog.csdn.net/shuux666/article/details/124146376