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
未知のエラーが起こりました。
