I've just checked out the ON DUPLICATE KEY UPDATE for MySQL.
Here is an example query.
$query = 'INSERT INTO `activities`
                  (`id`,
                   `hole_id`,
                   `name_id`,
                   `start_depth`,
                   `end_depth`,
                   `start_time`,
                   `end_time`
                  ) VALUES (
                :id,
                :hole_id,
                :name_id,
                :start_depth,
                :end_depth,
                :start_time,
                :end_time
            ) ON DUPLICATE KEY UPDATE
               `id` = :id,
               `hole_id` = :hole_id,
               `name_id` = :name_id,
               `start_depth` = :start_depth,
               `end_depth` = :end_depth,
               `start_time` = :start_time,
               `end_time` = :end_time
            ';
There is a lot of repetition there obviously.
Is there a way to say "insert, or if exists use the existing information to update".
I've looked at REPLACE, and it says it inserts and deletes if neccessary. The docs say to insert or update to use the method I've used above. 
So can I eliminate doubling up of all that update info?