by Nobbie » 08. January 2014 10:47
Das ist ein logischer Fehler in deiner Anwendung, das kann hier keiner finden. Du musst die Anwendung debuggen, offensichtlich wird ein Datensatz neu eingefügt, wo die "id" (oder wie auch immer der Primary Key heißt) mit einem Wert vorbelegt ist (was nicht empfohlen wird bei Neueinfügen), der schon vorhanden ist.
Wenn man neue Datensätzen anlegt, sollte man den Primary Key nicht(!) mit dem Programm besetzen, sondern keinen Wert (bzw. den Wert 0) angeben und in der Tabellendefinition dafür die Option "Autoincrement" angeben, dann vergibt MySQL automatisch den richtigen nächsten freien Wert.
Es könnte auch durch das Einspielen eines Backups passiert sein, dass ein Datensatz mit einem Primary Key eingespielt wurde, ohne dass der interne Zähler den richtig mitgezählt hat, das ist auch eine typische Fehlerursache. Aber ohne jede Kenntnis darüber, was das überhaupt für eine Software ist, wie die Tabellen aussehen, wie der konkrete insert aussieht, ist es vollkommen unmöglich, hier etwas genaueres zu sagen.
Was Du mit mysql_insert_id meinst, erschließt sich mir nicht. Sollte es so sein, dass Du diese Funktion benutzt, um den Wert des zuletzt eingefügten Primary Keys herauszufinden um dann selbst im Programm einen neuen Primary Key auszurechnen - dann ist das genau die Fehlerursache, wie oben schon beschrieben ist. Primary Keys darf man nicht selbst berechnen oder per Programm ermitteln, die müssen von der Datenbank automatisch vergeben werden. In einer Multiuserumgebung kann es durchaus passieren, dass mehrere Anwender so knapp hintereinander denselben Code ausführen (in einem Forum zu Beispiel), dass sie beide denselben Primary Key berechnen und der zweite insert geht dann in die Hose. Das ist jetzt allerdings schon wild geraten.