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
Sign Up Login You must be logged in to post a comment.