2013-04-01 46 views
0

所以我一直在瀏覽StackOverflow和MySQL手冊一段時間,似乎無法解決我的問題。我想要做的只是讓我的數據INSERT函數,使它不會添加任何東西,如果它已經存在我的表。我看到了一些方法:INSERT IGNORE函數和一個唯一的索引,對我來說似乎是最好的,但我不知道爲什麼它不工作......這是我的代碼的一部分(我有兩列:'用戶名'和'電子郵件',我的表被稱爲'info4'):僅當數據不存在時纔在MySQL表中插入數據:使用INSERT IGNORE時遇到問題

$unique_index = mysqli_query ($con, "CREATE UNIQUE INDEX index ON info4 (username, email);"); 

$insert = mysqli_query($con, "INSERT IGNORE INTO info4 (`username`, `email`) VALUES ('$array_values[0]', '$array_values[1]')"); 

我哪裏錯了?我錯過了什麼?

回答

2

Insert Ignore只是告訴MySQL不發出重複鍵錯誤試圖重複的數據插入到具有唯一約束的字段時。

獨特的索引應該是您需要停止插入重複條目所需的全部內容。

通常情況下,您不希望使用PHP來添加索引,您應該通過您使用的任何工具來訪問數據庫。

您是否看到重複的用戶名/電子郵件組合被插入到您的表中? $array_values[0]$array_values[1]的值是多少?

如果你做SHOW INDEX FROM info4你看到你的獨特索引?

+0

謝謝你的回答。我添加了插入忽略,因爲我讀它可以防止發生錯誤。這些變量的值來自一個表單。事實上,這段代碼位於process.php頁面,用於html用戶表單;這些值由用戶輸入。我的問題是,如果用戶多次使用表單並且多次輸入相同的值,它會不止一次出現在我的表中,這就是我想要阻止的。而最後的代碼並不顯示任何內容,這是否意味着我的索引不會被創建? – tmnol

+0

@TudorManole你在哪裏輸入SHOW INDEX查詢? – TheMethod

2

您無法創建名爲index的索引。

Mysql不區分大小寫。您的索引錯誤地命名爲「索引」將不起作用。

實施例:

的MySQL>上tbladresse(strasse_zusatz)創建索引索引; 錯誤1064(42000):您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本「上tbladresse(strasse_zusatz)指數 」用近1行

的mysql>上tbladresse(strasse_zusatz)創建索引iindex正確的語法手冊; 查詢確定,受影響的0行(0.03秒) 記錄:0重複:0警告:0

+0

非常感謝提示,但即使更換索引名稱後,代碼也不起作用... – tmnol

+0

不客氣。雖然我在mysql和php中也是初學者,所以我認爲@TheMethod更有可能幫助你解決這個問題。他在帖子裏有一些很好的信息和問題。 – Yannis

相關問題