Also andersherum betrachtet, willst du nur dann ein Insert machen, wenn es keinen "passenden" Datensatz zum Updaten gibt.
Ganz genau!
Am besten sagst du dir einfach, "das ist mir völlig Wurscht, interessiert mich nicht - soll sich die DB doch selbst drum kümmern."
Ich bin schon ganz begeistert von der Funktion (?), allerdings geht mir jetzt (wenn ich das richtig verstanden habe) mein auto_increasement flöten. Also wenn die id nicht existiert wird sie neu angelegt. Das ist aber nicht gewünscht, ich möchte dass die id (und der ganze Datensatz) überschrieben werden, wenn er existiert und wenn nicht, dass dann ein neuer erstellt wird allerdings mit einer neuen (dem auto_increasement folgenden) id.
Ich wüsste natürlich auch noch Möglichkeiten, so könnte ich z.B. die alten Werte in dem Ausgangsformular zusätzlich nocheinmal "hidden" mitschicken (oder einen Hash davon) und so in php noch feststellen, ob es verändert worden ist, aber das Formular ist schon relativ groß und ich würde es ungern noch aufblasen (wobei das mit einem Hash ja noch ginge).
Oder aber ich führe erst noch ein SELECT aus und prüfe so ob der Datensatz existiert, aber das wäre ja ein zusätzlicher Query und wie man im Code sieht ist das eine foreach-Anweisung, es würden alse gegebenenfalls SEHR viel mehr Queries.
Daher bin ich mit diesen Lösungen nicht soo zufrieden.