Duplicate entry '<wartość>' for key '<indeks>'
Skrypt próbował zapisać coś, co już istnieje — zwykle gracza dodawanego dwa razy.
Zrób najpierw to
Jeśli zdarza się przy każdym wejściu, skrypt wstawia bez wcześniejszego sprawdzenia. Zgłoś to autorowi.
Co to znaczy
INSERT próbował zapisać wartość, którą już trzyma klucz UNIQUE albo PRIMARY. MySQL odrzucił całe zapytanie. Komunikat podaje i wartość, i indeks, z którym się zderzyła, a razem wskazują one wiersz.
Co to powoduje
Uszeregowane według tego, jak często są odpowiedzią.
- 1
Wstawianie gracza, który już istnieje
Handler
playerConnectingalbo pierwszego wejścia, który wstawia bezwarunkowo. Drugie wejście, ten sam identyfikator, kolizja. - 2
Handler zarejestrowany dwa razy
To samo zdarzenie podpięte w dwóch plikach albo zasób zrestartowany bez wyczyszczenia handlera, więc każda akcja wykonuje się dwa razy.
- 3
Ponowienie po przekroczeniu czasu, które faktycznie się udało
Pierwszy insert zadziałał, a odpowiedź przepadła; ponowienie się zderza.
- 4
Dwa serwery na jednej bazie
Maszyna deweloperska i produkcyjna dzielące dane logowania.
- 5
Identyfikator generowany po stronie klienta
Cokolwiek, co klient podaje jako klucz główny, w końcu się powtórzy.
Jak poznać, który jest twój
Znajdź wiersz, który już tam jest:
SELECT * FROM users WHERE identifier = 'wartość-z-komunikatu';
Jeśli wygląda na prawidłowego, istniejącego gracza, insert w ogóle nie powinien był się wykonać. Jeśli to duplikat wiersza utworzonego kilka sekund temu, wstawiasz dwa razy.
Gdzie szukać
INSERT w zasobie i to, czy cokolwiek najpierw sprawdza istnienie.
Jak to naprawić
Powiedz, co ma się stać przy kolizji, zamiast pozwalać jej wywalać błąd:
-- zostaw istniejący wiersz, nie rób nic INSERT IGNORE INTO users (identifier, name) VALUES (?, ?) -- albo go zaktualizuj INSERT INTO users (identifier, name) VALUES (?, ?) ON DUPLICATE KEY UPDATE name = VALUES(name)
Wciąż utknąłeś na własnym kodzie?
Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.
bug_reportOtwórz Server FixerDla tego rodzaju błędu Script Optimizer wyłapuje wzorce zapytań, które to powodują.