【问题标题】:Error: Duplicate entry '' for key 'email'错误:密钥“电子邮件”的重复条目“”
【发布时间】:2015-11-12 14:37:48
【问题描述】:

我之前在运行 php 脚本的人中看到过这个错误,但这是在 phpmyadmin 中发生在我身上的??

Error
SQL query:

UPDATE  `cl56-goldeng`.`users` SET `email` =  '' WHERE  `users`.`id` =118

MySQL said: Documentation

#1062 - Duplicate entry '' for key 'email' 

如果我给该字段另一个值,它可以正常工作,但是如果我清除该字段并按 Enter,我会收到上述错误。

表格本身如下所示:

【问题讨论】:

  • 您的用户表中的电子邮件字段具有唯一键约束。唯一键只允许某个事物中的 1 个存在于表中。在您的情况下,已经有一个带有空字符串的用户记录作为他们的电子邮件。尝试将其设置为 NULL 而不是空。

标签: mysql phpmyadmin


【解决方案1】:

在您的表 cl56-goldeng.users 上,字段 email 在创建时指定为不允许超过 1 个相同的值进入其中。这是在 MySQL 中创建表时使用 UNIQUE 标识符完成的。 You can see more on the UNIQUE identifier at this link.

您有 2 个选项可以去做。

  • 首先是删除email 字段上的唯一约束。这完全取决于您在代码中的逻辑,但由于电子邮件应该几乎始终是唯一的,因此不建议这样做。

您可以通过运行以下命令删除唯一键: alter table [table-name] drop index [unique-key-index-name];

  • 其次,将使用NULL 而不是空字符串。我的假设是当用户电子邮件不存在时您设置一个空字符串。在这种情况下,最好使用NULL,然后在从数据库中检索数据时进行检查。

您可以在MySQL 语句中使用NULL 标识符插入NULL 值,如下所示:

INSERT INTO users (firstName,lastName,email)
  VALUES ('Bob','Ross',NULL);

然后检查NULL 值,无论您使用何种语言访问此数据。

【讨论】:

  • 谢谢,我目前正在使用:
  • if(isset($_POST['email'])){$email = $_POST['email'];}else{$email = NULL;}
  • 它更多地与您正在执行以插入值的 SQL 查询有关。如果您将NULL 作为String 变量(在引号之间)插入,它可能会在php 中被解释为一个空字符串(自从我使用php 以来已经有一段时间了,完全公开)。您应该检查您的查询,email === null ? NULL : ''.$variable.''
  • 谢谢,这似乎已经排序了 :)
【解决方案2】:

您的 email 字段具有唯一的约束。要么重新考虑你的逻辑,要么drop the unique constraint

【讨论】:

  • 如何在不删除字段的情况下摆脱唯一约束,因为在 phpmyadmin 中看不到任何删除它的内容?
  • 运行show create table users。这将转储您的表,该表将具有您的唯一约束。然后你可以ALTER TABLE users DROP CONSTRAINT <FOREIGN_KEY_NAME>
【解决方案3】:

那是因为您可能已经将电子邮件声明为唯一键,并且一旦您输入一行空电子邮件,它就不会除了另一封空电子邮件

【讨论】:

  • 电子邮件不是主键吗?。
  • 是的,我编辑了我的答案,但可能是因为它已经包含一个空的
猜你喜欢
  • 2017-11-24
  • 2012-03-09
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多