PHP PDO を使用して、失敗した UPDATE と正常に実行されたがフィールドを既存の値に設定した UPDATE の違いを区別する方法はありますか?
$sql = 'UPDATE table SET column = :column WHERE id = :id';
$statement = $db->prepare($sql);
$statement->bindParam(':column', $column, PDO::PARAM_STR);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$RowsUpdated = $statement->rowCount();
echo '$RowsUpdated = '.$RowsUpdated.'<br />';
上記のコードは、$column の値が新しい値の場合は $RowsUpdated を 1 に設定し、既存の値と同じ場合は 0 に設定します。SQL ステートメントを変更して強制的にエラーを発生させようとしましたが、数値以外の値 (NULL や False など) を返すことはなく、0 未満になることもありません。
行を COUNT(*) で SELECT すると、fetchColumn() は行があればその数を返し、行がなければ 0 を返し、エラーがあればそれ以外を返します。したがって、($countRowsSelected > 0) を使用して行を検出し、($countRowsSelected === "0") を使用して行を検出せず、ELSE を使用してエラーを検出することができます。
UPDATEでこれを行うことは可能ですか? 更新に加えて、保存された値が変更された場合にのみ二次アクションをトリガーしたいので、これが必要です:
if ($RowsUpdated > 0) {
// We go a NEW value, let's do a little dance
} else if ($RowsUpdated === "0") {
// It saved, but the value was unchanged
} else {
// Error!
}
PDO::MYSQL_ATTR_FOUND_ROWS => true を PDO に追加しようとしましたが、これにより、値が変更されたかどうかに関係なく、rowCount() が 1 を返すため、役に立ちませんでした。