Una solución simple serían dos consultas.
Primero, ejecute una consulta SELECT para verificar si la fila existe usando mysqli_num_rows().
Luego, si la fila existe, puede ejecutar la consulta UPDATE y usar mysqli_affected_rows().
[EDITAR]
... Sugeriré una alternativa potencial para cualquiera que busque una sola llamada. No sé si está interesado en hacer INSERCIONES o puramente ACTUALIZACIONES. A continuación hay algo para reflexionar:
Del comentario superior @ http://php.net/manual/en/ mysqli.afected-rows.php :
En las consultas "INSERT INTO ON DUPLICATE KEY UPDATE", aunque uno puede esperar que las filas afectadas devuelvan solo 0 o 1 por fila en las consultas exitosas, de hecho puede devolver 2.
Del manual de Mysql:"Con ON DUPLICATE KEY UPDATE, el valor de las filas afectadas por fila es 1 si la fila se inserta como una fila nueva y 2 si se actualiza una fila existente".
Ver:http://dev.mysql.com /doc/refman/5.0/en/insertar-en-duplicado.html
Aquí está el desglose de la suma por fila :
+0:una fila no se actualizó ni se insertó (probablemente porque la fila ya existía, pero en realidad no se cambiaron los valores de los campos durante la ACTUALIZACIÓN)
+1:se insertó una fila
+2:se actualizó una fila
¿Puedes adaptarlo a tus necesidades?