Question

J'ai une table que je stocke userinfo. Chaque utilisateur dispose d'un code d'utilisateur unique, mais le reste de leur information varie.

Quand je tente d'exécuter une instruction de mise à jour table, où userid = $ userid, je reçois un Duplicate entry 'XXX' for key 'userid' où XXX est leur userid.

J'ai le champ userid défini comme unique, mais de toute évidence Ive fait quelque chose de mal quelque part.

Voici ma déclaration

UPDATE `users` SET `screenname` =  '$screenname' ,`real_name` =  '$real_name' ,`profimg` =  '$profimg'  WHERE `userid` = '$userid'

Tableau Structure

CREATE TABLE `users` (
  `userid` int(11) NOT NULL,
  `screenname` text COLLATE utf8_unicode_ci NOT NULL,
  `real_name` text COLLATE utf8_unicode_ci NOT NULL,
  `profimg` text COLLATE utf8_unicode_ci NOT NULL,
  UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Était-ce utile?

La solution

Tout d'abord, vous devez utiliser un index de clé primaire au lieu d'un index unique. Un index de clé primarey désactive les entrées nulles, et bien que vous définissez la collumn à NOT NULL, il est préférable d'utiliser un indice de PK, puisque le collumn est en fait la clé primaire de la table.

essayer de redéfinir votre table comme ceci:

CREATE TABLE `users` (
  `userid` int(11) NOT NULL,
  `screenname` text NOT NULL,
  `real_name` text NOT NULL,
  `profimg` text NOT NULL,
  PRIMARY KEY `useridKey` (`userid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Vous pouvez également jeter un oeil à la AUTO_INCREMENT attribut collumn.
Assurez-vous aussi d'échapper à vos variables avant de les mettre dans votre requête pour annuler les injections SQL ...

Autres conseils

Je pense que vous utilisez PHP. avez-vous mis requête entre guillemets comme

$sql = "UPDATE foobar SET bar = '$foo' WHERE id = '$id'";

si vous avez utilisé guillemet simple PHP ne remplacera pas vos variables

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top