comment configurer une table MySQL pour une utilisation avec UPDATE WHERE déclaration
-
19-09-2019 - |
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;
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