Мне нужно обновить новую строку, только если оба: date='$dat'
и empId='$who
(в виде составного ключа). Но вставьте, если один из них или оба отличаются:
$sql= "INSERT INTO history SET endtimestamp='$now',end='$signature',date='$dat',empId='$who' ON DUPLICATE KEY UPDATE endtimestamp='$now',end='$signature'";
Из документации MySQL: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
Если вы укажете ON DUPLICATE KEY UPDATE, и будет вставлена строка, которая приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY , будет выполнено ОБНОВЛЕНИЕ старой строки.
Первичный ключ индивидуальный (за столбец). Вам нужно создать объединенный индекс UNIQUE, содержащий оба столбца, тогда обновление будет работать правильно.
Запустите это в базе данных:
CREATE UNIQUE INDEX unq_employee_id_date ON history (empId, date);