my_ulonglong mysql_affected_rows(MYSQL *mysql)
説明
mysql_affected_rows()
は、mysql_query()
または mysql_real_query()
によるステートメントの実行直後に呼び出すことができます。それは、最後のステートメントが UPDATE
、DELETE
、または 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));