eigentlich wollten wir Euch dieses Wochenende mit der Version 4.0.2 beliefern. Aber erstens kommt es anders und zweitens als man denkt. Nachdem wir jetzt den zweiten Hinweis auf dieses Problem bekommen haben, konnten wir gezielter suchen und haben die Ursache gefunden:
Problem:
Benutzer in ConPresso koennen aus technischen Gruenden (Verknuepfungen in der Datenbank, usw.) nicht mehr geloescht werden, sondern werden nur noch "deaktiviert". Hierzu wird die ID des Benutzers ins negative umgewandelt.
Wenn jetzt jemand einen neuen Benutzer anlegt, bekommt dieser die maximal moegliche Integer-Zahl in MySQL als ID zugewiesen (2147483647).
Beim naechsten Benutzer wird versucht, diese ID zu erhoehen. Dieses schlaegt natuerlich fehl und wird mit folgender MySQL-Fehlermeldung quittiert:
Code: Alles auswählen
Database error:
Invalid SQL: INSERT INTO cpo4_user (user, name, initial, email, language, admin, usergroups_id, passwd) VALUES ('X', 'X', 'X', 'X', 'X', 'X', '', 'X')
Duplicate entry '2147483647' for key 1 (1062)
Meiner Meinung nach handelt es sich um ein Problem mit "aelteren" MySQL-Versionen, welches auch mal im Handbuch gestanden zu haben scheint:
Lösung:MySQL Version 3.23 will also only work properly if the AUTO_INCREMENT column only has positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems when numbers 'wrap' over from positive to negative and also to ensure that one doesn't accidentally get an AUTO_INCREMENT column that contains 0.
Kurzfristig: Benutzer nicht deaktivieren. Um zu verhindern, dass sich der Benutzer einloggt, kann man sein Passwort und die Mailadresse aendern.
Längerfristig: Auf das naechste Update warten. Wir koennen uns in diesem Fall leider wohl nicht auf das auto_increment von MySQL verlassen, sondern muessen die Werte manuell setzen...
Sollte es schon einen Benutzer mit der ID 2147483647 geben, so kann man diesen Benutzer mit SQL-Befehlen auf einen korrekten Wert setzen (ungetestet):
XXX = neue ID des benutzers (groesster Wert in cpo_user plus 1)
Code: Alles auswählen
UPDATE cpo4_user SET id=XXX WHERE id=2147483647;
UPDATE cpo4_snippet SET user_id=XXX WHERE user_id=2147483647;
UPDATE cpo4_permission SET user_id=XXX WHERE user_id=2147483647;
UPDATE cpo4_news SET released_user_id=XXX WHERE released_user_id=2147483647;
UPDATE cpo4_log_login SET user_id=XXX WHERE user_id=2147483647;
UPDATE cpo4_data SET user_id=XXX WHERE user_id=2147483647;
ALTER TABLE cpo4_user AUTO_INCREMENT=XXX+1
Balu