Bonjour.
J'ai surtout l'impression que tu confonds entre les instructions INSERT et UPDATE.
Pour rappel, INSERT permet de créer un nouvel enregistrement et UPDATE permet de mettre à jour un enregistrement existant.
Est-ce normal ?
Donc la réponse est oui, car en traduisant la requête que tu essaies de faire, tu demandes à créer un nouvel enregistrement sur un enregistrement déja existant, ce que SQL ne fera pas.
Tu ne peux pas coupler un __INSERT_ avec un WHERE__.
C'est donc soit INSERT INTO users (...) VALUES(...) ou UPDATE users SET champ = ? WHERE id = ?.
Par contre, fais attention à l'ordre des paramêtres que tu définies, surtout lorsqu'ils ne sont pas nommés.