int mysql_next_result(MYSQL *mysql)
説明
この関数は、単一のステートメント文字列として指定された複数のステートメントを実行する場合、または複数の結果セットを返すことがある CALL
ステートメントを使用して、ストアドプロシージャーを実行する場合に使用します。
mysql_next_result()
は次のステートメント結果を読み取り、それ以上の結果が存在するかどうかを示すステータスを返します。mysql_next_result()
がエラーを返した場合、それ以上の結果はありません。
mysql_next_result()
の各呼び出しの前に、現在のステートメントが結果セットを返した (結果のステータスだけでなく) ステートメントである場合、そのステートメントに対して mysql_free_result()
を呼び出す必要があります。
mysql_next_result()
を呼び出したあとの接続の状態は、次のステートメントに対し、mysql_real_query()
または mysql_query()
を呼び出した場合のようになります。このことは、mysql_store_result()
、mysql_warning_count()
、mysql_affected_rows()
などを呼び出すことができることを意味します。
プログラムで CALL
ステートメントを使用して、ストアドプロシージャーを実行する場合、CLIENT_MULTI_RESULTS
フラグが有効になっている必要があります。これは、各 CALL
によって、プロシージャー内で実行されるステートメントによって返される可能性のある結果セットに加えて、呼び出しステータスを示すための結果が返されるためです。CALL
は複数の結果を返すことができるため、mysql_next_result()
を呼び出すループを使用して、それらを処理し、それ以上の結果があるかどうかを判断します。
CLIENT_MULTI_RESULTS
は、mysql_real_connect()
を呼び出すときに、CLIENT_MULTI_RESULTS
フラグ自体を渡すことによって明示的に、または CLIENT_MULTI_STATEMENTS
を渡すことによって暗黙的に有効にする (これによって CLIENT_MULTI_RESULTS
も有効になります) ことができます。MySQL 5.6 では、CLIENT_MULTI_RESULTS
はデフォルトで有効にされています。
mysql_more_results()
を呼び出して、それ以上の結果があるかどうかをテストすることもできます。ただし、この関数は接続の状態を変更しないため、それが true を返した場合は、さらに mysql_next_result()
を呼び出して、次の結果に進む必要があります。
mysql_next_result()
の使用方法を示す例については、セクション23.7.17「複数ステートメント実行の C API サポート」を参照してください。
戻り値
戻り値 | 説明 |
---|---|
0 | 成功し、それ以上の結果が存在します |
-1 | 成功し、それ以上の結果が存在しません |
0 より大きい | エラーが発生しました |
エラー
-
CR_COMMANDS_OUT_OF_SYNC
コマンドが正しくない順番で実行されました。たとえば、前の結果セットに対して
mysql_use_result()
を呼び出していなかった場合。 -
CR_SERVER_GONE_ERROR
MySQL サーバーが存在しなくなりました。
-
CR_SERVER_LOST
サーバーへの接続がクエリー中に失われました。
-
CR_UNKNOWN_ERROR
不明なエラーが発生しました。