THE ORB
Démarrage du studio

Entrée en double « <valeur> » pour la clé « <index> »

Un script a tenté d'enregistrer quelque chose qui existe déjà, en général un joueur ajouté deux fois.

groupsL'enregistrement échoue pour ce joueurcodeIl faut un développeur

Faites d'abord ceci

Si cela arrive à chaque connexion, le script insère sans vérifier avant. Signalez-le à l'auteur.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Un INSERT a tenté d'écrire une valeur qu'une clé UNIQUE ou PRIMARY possède déjà. MySQL a refusé toute l'instruction. Le message nomme la valeur et l'index en conflit, et à eux deux ils identifient la ligne.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Insérer un joueur qui existe déjà

    Un gestionnaire playerConnecting ou de première connexion qui insère sans condition. Deuxième connexion, même identifiant, collision.

  2. 2

    Un gestionnaire enregistré deux fois

    Le même événement lié dans deux fichiers, ou une ressource redémarrée sans que son gestionnaire soit nettoyé, donc chaque action s'exécute deux fois.

  3. 3

    Une nouvelle tentative après un délai dépassé qui avait en fait réussi

    Le premier insert a fonctionné et la réponse s'est perdue ; la relance entre en collision.

  4. 4

    Deux serveurs sur une seule base de données

    Une machine de dev et une de production partageant les identifiants.

  5. 5

    Un identifiant généré côté client

    Tout ce que le client fournit comme clé primaire finira par se répéter.

Comment savoir laquelle est la vôtre

Cherchez la ligne déjà présente :

SELECT * FROM users WHERE identifier = 'la-valeur-du-message';

Si cela ressemble à un joueur légitime déjà existant, l'insert n'aurait jamais dû s'exécuter. Si c'est un doublon d'une ligne créée il y a quelques secondes, vous insérez deux fois.

Où regarder

L'INSERT dans la ressource, et si quelque chose vérifie l'existence au préalable.

Comment la corriger

Dites ce qui doit se passer en cas de collision plutôt que de laisser l'erreur survenir :

-- garder la ligne existante, ne rien faire
INSERT IGNORE INTO users (identifier, name) VALUES (?, ?)

-- ou la mettre à jour
INSERT INTO users (identifier, name) VALUES (?, ?)
ON DUPLICATE KEY UPDATE name = VALUES(name)

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer repère les motifs de requête à l'origine de ceci.

Les erreurs qui voyagent avec celle-ci