無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 23 APIとライブラリー :: 23.2 MySQL C API :: 23.2.6 準備されたC APIステートメント機能の概要
« 23.2.5 準備されたC APIステートメントデータタイプ

23.2.7 準備された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.6. 準備されたC APIステートメント機能の概要

準備されたステートメントの処理に利用可能な機能の概要をここで一括説明し、後のセクションで各機能について詳細に説明します。項23.2.7. 「準備されたC APIステートメント機能の詳細」を参照してください。

機能 説明
mysql_stmt_affected_rows() 準備されたUPDATE、DELETE、またはINSERT ステートメントの行変更、消去、もしくは挿入の回数を返す。
mysql_stmt_attr_get() 準備されたステートメントの属性値を入手する。
mysql_stmt_attr_set() 準備されたステートメントの属性をセットする。
mysql_stmt_bind_param() 準備されたSQLステートメントのパラメータマーカとアプリケーションデータバッファを関連させる。
mysql_stmt_bind_result() 結果セットのカラムとアプリケーションデータバッファを関連させる。
mysql_stmt_close() 準備されたステートメントに使用されているメモリを開放する。
mysql_stmt_data_seek() ステートメント結果セットの任意の行ナンバーをシークする。
mysql_stmt_errno() 最後に実行されたステートメントに対してエラーナンバーを返す。
mysql_stmt_error() 最後に実行されたステートメントに対してエラーメッセージを返す。
mysql_stmt_execute() 準備されたステートメントを実行する。
mysql_stmt_fetch() 結果セットから次のデータの行を入手し、全ての束縛されたカラムのデータを返す。
mysql_stmt_fetch_column() 結果セットの現在の行の1カラムからデータを入手する。
mysql_stmt_field_count() 最近のステートメントの結果カラムの数を返す。
mysql_stmt_free_result() ステートメントハンドルに割り当てられたリソースを開放する。
mysql_stmt_init() MYSQL_STMT 構成のためのメモリを確保し、初期化する。
mysql_stmt_insert_id() 準備されたプログラムに夜AUTO_INCREMENT カラム用に生成されたIDを返す。
mysql_stmt_num_rows() ステートメントのバッファされた結果セットからトータル行を返す。
mysql_stmt_param_count() 準備されたSQLステートメント内のパラメータの数を返す。
mysql_stmt_param_metadata() (結果セットの形でパラメータメタデータを返す。)現在、この機能は何もしません。
mysql_stmt_prepare() は実行のため、SQLストリングを用意します。
mysql_stmt_reset() Reset the statement buffers in the server.
mysql_stmt_result_metadata() Returns prepared statement metadata in the form of a result set.
mysql_stmt_row_seek() Seeks to a row offset in a statement result set, using value returned from mysql_stmt_row_tell().
mysql_stmt_row_tell() Returns the statement row cursor position.
mysql_stmt_send_long_data() Sends long data in chunks to server.
mysql_stmt_sqlstate() Returns the SQLSTATE error code for the last statement execution.
mysql_stmt_store_result() Retrieves the complete result set to the client.

ステートメントハンドルを作成するにはmysql_stmt_init() を呼び出してください。準備するにはmysql_stmt_prepare を呼び出してください。パラメータデータを提供するにはmysql_stmt_bind_param() を呼び出してください。ステートメントを実行するにはmysql_stmt_execute() を呼び出してください。mysql_stmt_bind_param()を通して供給された各バッファー中のパラメータを変更することによって、mysql_stmt_execute()を繰り返すことができます。.

ステートメントがSELECTまたは結果セットを生成するその他のステートメントである場合、mysql_stmt_prepare()は、MYSQL_RES結果セットのフォームの中に、mysql_stmt_result_metadata()を通して、結果セットメタデータ情報も戻します。

mysql_stmt_bind_result()を使って、結果バッファーを供給することができるのので、mysql_stmt_fetch()は自動的にデータをこれらのバッファーに戻します。これが列別フェッチングです。

シャンク中のエキストまたはバイナリーデータをmysql_stmt_send_long_data()を使ってサーバに送ることもできます。項23.2.7.25. 「mysql_stmt_data_seek()」を参照してください。

ステートメントの実行が終わったとき、それをmysql_stmt_close()を使って閉じなければならないので、それに付属する全ての資源を解放することができます。

mysql_stmt_result_metadata()を呼び出すことによって、SELECTステートメントの結果セットメタデータを取得した場合、mysql_free_result()を使ってメタデータも解放すべきです。

実行ステップ

ステートメントをを準備して実行するために、アプリケーションはこれらのステップに従います:

  1. mysql_stmt_init()を使って準備されたステートメントのハンドルを生成させてください。サーバ上にステートメントを準備するため、mysql_stmt_prepare() を呼び出して、それをSQLステートメントを含むストリングに渡してください。

  2. ステートメントが結果セットを生成する場合、mysql_stmt_result_metadata()を呼び出して、結果セットメタデータを取得してください。このメタデータは、クエリーによって戻された列を含むものとは違いますが、結果セット中に含まれています。メタデータ結果セットは、カラムが結果中に幾つ存在しているかを示し、各カラムに関する情報を含んでいます。

  3. mysql_stmt_bind_param()を使って、パラメータの値をセットしてください。すべてのパラメータをセットしなければなりません。さもなければ、ステートメントがエラーを戻すか、意外な結果を引き起こします。

  4. mysql_stmt_execute()を呼び出してステートメントを実行してください。

  5. ステートメントが結果セットを生成する場合、メタデータバッファーを結束して、mysql_stmt_bind_result()を呼び出すことによって、列の値を復元するために使ってください。

  6. 繰り返しmysql_stmt_fetch()を呼び出すことによって、列が見つからなくなるまで、データを列ごとにバッファーの中にフェッチしてください。

  7. パラメータの値を変えてステートメントを再実行することによって、必要に応じて3回から6回ステップを繰り返し実行してください。

mysql_stmt_prepare()が呼び出されるとき、MySQLクライアント/サーバプロトコルはこれらのアクションを実施します。

  • サーバはステートメントを解析し、ステートメントにIDを割り当てることによって、Okのステータスをクライアントに送り返します。それが結果セットを指向したステートメントである場合、サーバはパラメータの合計ナンバー、カラムカウントおよびそのメタデータも送ります。ステートメントのすべてのsyntaxとsemanticsがこの呼び出し中に、サーバによってチェックされます。

  • クライアントは、そのステートメントを、ステートメントプールにあるその他のステートメントと区別することができるように、このステートメントのIDを更なるオペレーションに使います。

mysql_stmt_execute()が呼び出されるとき、MySQLクライアント/サーバプロトコルはこれらのアクションを実施します。

  • クライアントはステートメントハンドルを使って、サーバーにパラメータデータを送ります。

  • サーバは、クライアントが提供したIDを使ってステートメントを識別し、パラメータ・マーカーを使って新しく供給されたデータと入れ替えて、ステートメントを実行します。ステートメントが結果セットを生成する場合、サーバーはクライアントにデータを送り返します。さもなければ、それは変更、削除または挿入されたOkステータスと列の合計数を送ります。

mysql_stmt_fetch()が呼び出されるとき、MySQLクライアント/サーバプロトコルはこれらのアクションを実施します。

  • クライアントは列別にパケット列からデータを読み取って、それを必要な変換をすることによって、アプリケーションデータバッファの中に置きます。アプリケーションバッファタイプが、サーバーからタイプが戻されたフィールドのそれと同じであると、変換は簡単です。

エラーが発生した場合、mysql_stmt_errno()、mysql_stmt_error()およびmysql_stmt_sqlstate()を繰り返し使って、ステートメントエラーコード、エラーメッセージ並びにSQLSTATE値を を得ることができます。

準備されたステートメントのロギング

mysql_stmt_prepare() と mysql_stmt_execute() C API ファンクションで準備されたステートメントに対して、サーバは準備そして実行 ラインを一般クエリログに送信します。これによりステートメントがいつ準備、実行されたかわかります。

次のようにステートメントを準備して実行すると考えてください:

  1. mysql_stmt_prepare()を呼び出してステートメントストリング"SELECT ?"を用意します。

  2. mysql_stmt_bind_param()を呼び出して、値3を準備されたステートメント中のパラメータに結びつけます。

  3. mysql_stmt_execute()を呼び出して準備されたステートメントを実行してください。

前のコールの結果として、サーバーは一般クエリーログに次の行を書き込みます:

Prepare  [1] SELECT ?
Execute  [1] SELECT 3

ログ内の各準備 と実行ラインは、[N]ステートメント識別子でタグされます。これはどの準備されたステートメントがログしているか確認するためです。Nは正の整数です。複数の準備されたステートメントがクライアントに対して同時にアクテブである場合、Nを1より大きくすることができます。各Executeラインは、?パラメータのためにデータ値を取り替えた後の準備されたステートメントを示します。

バージョンの注意:準備 ラインは、[N] なしで、MySQL 4.1.10前は表示されます。実行 ラインはMySQL 4.1.10前では表示されません。

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.