Both previous replies are definitely on the mark. To follow up on the second one (and provide the missing detail that was not mentioned there): you want your "ON DUPLICATE KEY UPDATE ..." clause to include a reference to the primary key field -- something like this, assuming the "field_three" part is still needed:
. " ON DUPLICATE KEY"
. " UPDATE field_three = ?, your_key_field=LAST_INSERT_ID(your
+_key_field)";
I've always found this syntax to be a little disorienting, but you just have to accept the fact that when trying to insert a record that would violate some uniqueness constraint, the application of that constraint leaves the "last_insert_id" value "not meaningful". Check the last paragraph in section 12.2.4.3 of the mysql manual for an explanation (if you're using mysql), or the corresponding doc of your particular rdb server.