MYSQL_RES *mysql_use_result(MYSQL *mysql)
説明
データ(SELECT
、
SHOW
、
DESCRIBE
、EXPLAIN
)をうまく復元する全てのクエリーのために、mysql_store_result
もしくはmysql_use_result()
を呼び出さなければなりません。
mysql_use_result()
は結果セットの複製を先導しますが、mysql_store_result()
がするように、実際にクライアントの中に読み取りません。にもかかわらず、mysql_fetch_row()
に対する呼び出しを行うことによって、各列を個別に復元しなければなりません。これは、サーバから直接クエリーの結果を、それを一時テーブルまたはローカルバッファーに記憶させることなく読み取ります。これは幾らか高速で、mysql_store_result()
より少ないメモリーを使います。.クライアントは現在の列およびmax_allowed_packet
バイトに成長した通信バッファーだけにメモリーを割り当てます。
一方、クライアント側にある各列に対して多くの処理を行う場合、もしくはユーザーがアウトプットを^S
(スクロール停止)をタイプしてもよいスクリーンに送る場合、mysql_use_result()
を使用すべきではありません。これはサーバを拘束し、他のスレッドが、そこからデータがフェッチされているテーブルをアップデートするのを阻止します。
mysql_use_result()
を使うとき、NULL
値が戻されるまで、mysql_fetch_row()
を実行しなければなりません。C
APIは、これを行うのを忘れた場合、エラーCommands
out of sync; you can't run this command
now
を附与します。
mysql_data_seek()
、mysql_row_seek()
、mysql_row_tell()
、mysql_num_rows()
もしくはmysql_affected_rows()
をmysql_use_result()
から戻された結果と一緒に使ってはなりません。また、mysql_use_result()
が終了するまで、他のクエリーを発行してもなりません。(しかしながら、すべての列をフェッチした後、mysql_num_rows()
はフェッチした行の数を正確に戻します。)
結果セットが必要となってから、mysql_free_result()
を呼び出さなければなりません。
libmysqld
埋込サーバを使うとき、mysql_free_result()
が呼び出されるまで、メモリーの使用が戻された各列と共に徐々に増加するので、メモリー利益が本質的に失われます。
戻り値
MYSQL_RES
結果構造。NULL
エラーが起こった場合。
エラー
mysql_store_result()
は成功すると、mysql_error()
とmysql_errno()
をリセットします。
CR_COMMANDS_OUT_OF_SYNC
コマンドが妥当でないオーダーで実行されました。
CR_OUT_OF_MEMORY
メモリ不足。
CR_SERVER_GONE_ERROR
MySQLサーバが立ち去りました。
CR_SERVER_LOST
サーバへの接続がクエリー中に失われました。
CR_UNKNOWN_ERROR
未知のエラーが起こりました。