Почему я получаю ошибку повторяющейся записи, если нет повторяющейся записи? - PullRequest
0 голосов
/ 24 ноября 2010

Я получаю следующую ошибку:

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, это первый запрос, который я выполняю, поэтому ядействительно не могу понять, как может существовать повторяющаяся запись, особенно, поскольку я только что проверил это раньше.

после прочтения этой цепочки , я попытался запустить утилиту проверки таблицы, но она не показалаошибки вообще ..

кстати, если я запускаю сценарий много раз подряд, я всегда получаю сообщение об ошибке, и к имени пользователя добавляется множество символов 2 (ahamzaoui_v222)

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Помимо поврежденной базы данных или индекса ключа, я могу думать только об одном: поле 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)
0 голосов
/ 24 ноября 2010

Имеет ли рассматриваемая таблица ограничение уникальности для столбца имени пользователя? Вы проверили, есть ли в массиве $ infos повторяющиеся значения с одинаковыми именами во время итерации обновления - дублированные значения, которых не было в базе данных после того, как вы выполнили какой-либо тип манипуляции со строками в php?

...