我在php中有一个非常简单的SQL查询。在某人创建了用户名后,他们可以将其编辑为其他内容。
$uName_str = "UPDATE users SET users.username = '{$newUserName}' WHERE users.username = '{$oldUserName}';
但我不希望他们能够将用户名更新为与其他人相同的用户名。主键是userID。我可以运行一个单独的查询来查找所有用户名,然后将新选择的用户名与用户名数据库进行比较,但对一件事完全独立的查询似乎效率低下。有没有办法将其写为单个查询,以防止任何重复的条目?
答案 0 :(得分:2)
在用户名栏上创建唯一索引。然后检查更新时的错误/异常。
答案 1 :(得分:1)
请添加username
作为唯一索引。之后,如果有人试图复制该条目,您将收到MySQL错误:
ALTER TABLE `users` ADD UNIQUE(`username`);
答案 2 :(得分:-1)
所有你需要的:
ALTER TABLE users ADD UNIQUE INDEX(username);
$uName_str = "UPDATE IGNORE users SET users.username = '{$newUserName}' WHERE users.username = '{$oldUserName}';
答案 3 :(得分:-2)
运行简单查询以检查是否使用了用户名不会被视为效率低下。这将被视为最佳做法。您也可以制作存储过程。但这是一个更复杂的解决方案。我不推荐Rob的回答。因为它会在你的错误日志中填充异常,当你真正只是用户名时,你会相信它是错误的。