2010-11-24 184 views
0

我收到以下錯誤:運行PHP腳本時爲什麼當沒有重複輸入時會出現重複輸入錯誤?

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

。我已經嘗試過很多次了,但我不知道爲什麼我會收到這個錯誤。 這裏是圍繞線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,我tryed運行檢查表utilisateur,但無論如何沒有透露出錯..

順便說一句,如果我運行該腳本多次在一排,我總是得到錯誤,以及用戶名結束(ahamzaoui_v222)

回答

0

問題表是否對用戶名列有唯一性限制?你是否檢查過你的更新迭代中$ infos數組中是否有相同名稱的重複值 - 在php中執行某種類型的字符串操作後,數據庫中不存在重複的值?

+0

用戶名是唯一的,是的。至於$ info數組,我像這樣使用它:$ infos = mysql_query($ sqlCopier);如果($ infos){if(mysql_num_rows($ infos)> 0) {$ infos = mysql_fetch_array($ infos);沒有PHP字符串操作.. – Shawn 2010-11-25 03:32:20

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) 
+0

Matricule實際上是主鍵。我很確定它是獨一無二的。我知道我的SELECT語句沒有返回多行(我試過打印結果) – Shawn 2010-11-25 03:23:57