Ваш первый запрос не соответствует вашему второму блоку кода.
Первый
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
values('$this->nombre', '$ruta', '$u')
on duplicate key update urlimagen=values('$ruta')";
Второй: неверный
$update = "insert into mapa_etiquetas ('casa','image.png',2)
values('$this->nombre', '$ruta', '$u')
on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas ('casa','image2.png',2)
values('$this->nombre', '$ruta', '$u')
on duplicate key update urlimagen=values('$ruta')";
Проблема с вашим вторым блоком заключается в том, что вы называете значения, куда должны идти имена столбцов.Я считаю, что правильный второй блок должен быть:
Второй: исправлено
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
values('$this->nombre', '$ruta', '$u')
on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
values('$this->nombre', '$ruta', '$u')
on duplicate key update urlimagen=values('$ruta')";
Я также согласен с @The Scrum Meister.К их ответу следует прислушаться в отношении надлежащего использования условия «при обновлении дублированного ключа».