Php 没有重复条目时,为什么会出现重复条目错误?

Php 没有重复条目时,为什么会出现重复条目错误?,php,mysql,duplicates,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

我得到以下错误:

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))
如您所见,我试图在Username的现有值后面附加一个2。 这是我不明白的。如果我去看看Usilizateur表,我找不到任何值为ahamzaoui_v2的条目。然后我尝试运行脚本,我得到了错误!有趣的是,在脚本运行并报告错误后,值被更改!我现在有了ahamzaoui_v2而不是ahamzaoui_v。问题是脚本的其余部分没有执行,所以我只得到我想要的一小部分

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

在阅读时,我试着使用我们的检查表,但没有发现任何错误


顺便说一句,如果我在一行中多次运行该脚本,我总是会得到错误,并且用户名最后附加了大量的2。ahamzaoui_v222

所讨论的表在username列上是否有唯一性约束?您是否检查过在更新迭代过程中,$infos数组中是否存在同名的重复值?在php中执行某种类型的字符串操作后,数据库中不存在重复值?

除了损坏的数据库或键索引之外,我能想到的只有一件事:矩阵字段唯一?SELECT*FROM USILIATEUR,其中矩阵='{$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)

矩阵实际上是主键。我很确定这是独一无二的。我知道我的SELECT语句不会返回多行,我已经尝试打印出结果修改脚本以输出UPDATE语句,但不执行它。相反,将该语句复制并粘贴到MySQL控制台或PHPMyAdmin中-这将返回匹配的行数和受影响的行数,如果用户名是唯一的,并且通过主键进行查找,则两者都应为1。如果您在MySQL控制台/PHPMyAdmin中遇到相同的错误,那么数据库表就会出现问题。如果控制台中没有错误,则说明脚本有问题。用户名是唯一的,是的。至于$info数组,我是这样使用的:$infos=mysql\u query$sqlCopier;如果$infos{ifmysql\u num\u rows$infos>0{$infos=mysql\u fetch\u array$infos;无php字符串操作。。