Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


23.8.7.1 mysql_affected_rows()

my_ulonglong mysql_affected_rows(MYSQL *mysql)

説明

mysql_affected_rows() は、mysql_query() または mysql_real_query() によるステートメントの実行直後に呼び出すことができます。それは、最後のステートメントが UPDATEDELETE、または INSERT であった場合に、それによって変更、削除、または挿入された行数を返します。SELECT ステートメントの場合、mysql_affected_rows()mysql_num_rows() のように動作します。

UPDATE ステートメントの場合、デフォルトで影響を受けた行の値は実際に変更された行の数です。mysqld への接続時に CLIENT_FOUND_ROWS フラグを mysql_real_connect() に指定した場合、影響を受けた行の値は見つかった、つまり WHERE 句に一致した行数です。

REPLACE ステートメントの場合、影響を受けた行の値は、新しい行が古い行に置き換わった場合 2 です。この場合、重複が削除されたあとに行が挿入されたためです。

INSERT ... ON DUPLICATE KEY UPDATE ステートメントの場合、行ごとの影響を受けた行の値は、その行が新しい行として挿入された場合は 1、既存の行が更新された場合は 2、既存の行がその現在の値に設定された場合は 0 です。CLIENT_FOUND_ROWS フラグを指定した場合、影響を受けた行の値は、既存の行がその現在の値に設定された場合は (0 ではなく) 1 になります。

ストアドプロシージャーの CALL ステートメントに続く mysql_affected_rows() は、プロシージャー内の最後に実行されたステートメントに対して返す値か、またはそのステートメントが -1 を返す場合は 0 を返します。プロシージャー内で、SQL レベルで ROW_COUNT() を使用して、個々のステートメントの影響を受けた行の値を取得できます。

MySQL 5.6 では、mysql_affected_rows() はより幅広いステートメントに対して有効な値を返します。詳細については、セクション12.14「情報関数」ROW_COUNT() の説明を参照してください。

戻り値

ゼロより大きい整数は影響を受けたか、取得された行の数を示します。ゼロは、UPDATE ステートメントに対してレコードが更新されなかったか、クエリー内の WHERE 句に一致した行がなかったか、クエリーがまだ実行されていないことを示します。-1 は、クエリーがエラーを返したか、SELECT クエリーの場合に、mysql_store_result() を呼び出す前に、mysql_affected_rows() が呼び出されたことを示します。

mysql_affected_rows() は符号なし値を返すため、戻り値を (my_ulonglong)-1 (または同等である (my_ulonglong)~0) と比較することによって、-1 をチェックできます。

エラー

なし。

char *stmt = "UPDATE products SET cost=cost*1.25
              WHERE group=10";
mysql_query(&mysql,stmt);
printf("%ld products updated",
       (long) mysql_affected_rows(&mysql));

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.