为什么在没有重复条目时会出现重复输入错误?

时间:2010-11-24 01:18:14

标签: php mysql duplicates

我收到以下错误:

Duplicate entry 'ahamzaoui_v2' for key 'Username' in /opt/lampp/htdocs/webEchange/SiteWeb_V5/dupliquerCompte2.php on line 135

运行php脚本时。我已经尝试了很多次,但我不知道为什么我会收到这个错误。 这是第135行的代码:

$sql = "UPDATE utilisateur SET Username = '" . mysql_real_escape_string($infos['Username']) . "2', MotDePasse = '" . mysql_real_escape_string($infos['MotDePasse']) . "2' WHERE Matricule = " . $infos['Matricule'];

line 135 -> if(mysql_query($sql))

正如您所看到的,我正在尝试将2添加到用户名的现有值。 这是我不明白的。如果我去查看utilisateur表,我找不到任何具有值ahamzaoui_v2的条目。然后我尝试运行脚本,我收到错误!有趣的是,在脚本运行(并报告错误)后,值已更改!我现在有ahamzaoui_v2而不是ahamzaoui_v。问题是脚本的REST没有被执行所以我只得到了我想要的一部分(一小部分)。

除了SELECT语句之外,这是我运行的第一个查询,所以我真的看不出如何有重复的条目,特别是因为我之前刚检查过它。

在阅读this thread后,我尝试运行check table utilisateur,但它没有显示任何错误..

顺便说一句,如果我连续多次运行该脚本,我总是会收到错误,并且用户名最终会附加大量的2(ahamzaoui_v222)

2 个答案:

答案 0 :(得分:2)

除了损坏的数据库或密钥索引之外,我还能想到另外一件事:Matricule字段是唯一的吗? SELECT * FROM utilisateur WHERE Matricule = '{$infos['Matricule']}'会返回多行吗?如果是这样,UPDATE语句将更改匹配的第一行(因此更改数据),但对后续行的更新将失败并生成警告(停止脚本执行):

mysql> create table test (a INT UNIQUE, b INT );
Query OK, 0 rows affected (0.10 sec)

mysql> insert into test VALUES (NULL, 2);
Query OK, 1 row affected (0.03 sec)

mysql> insert into test VALUES (NULL, 2);
Query OK, 1 row affected (0.00 sec)

mysql> update test set a = 1 where b = 2;
ERROR 1062 (23000): Duplicate entry '1' for key 'a'
mysql> select * from test;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
| NULL |    2 |
+------+------+
2 rows in set (0.00 sec)

答案 1 :(得分:0)

有问题的表是否在用户名栏上有唯一性约束?您是否检查过更新迭代中$ infos数组中是否存在同名的重复值 - 在PHP中执行某种类型的字符串操作后,数据库中没有重复的值?