2013-08-17 15 views
0

我已經創建了正確的sql數據庫和表,如何檢查表中是否存在sql值以防止重複?

但是,當我試圖通過使用while循環打印在php中的值,我注意到我得到重複的值打印。起初我以爲這是while循環。然後我注意到每次運行php代碼時,每次運行代碼時都會得到更多的重複項。我不想重複。

以下是我寫的代碼表:

$sql = "CREATE TABLE IF NOT EXISTS alarms (
    alarmID INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (alarmID), 
    Title CHAR(30), 
    Description TEXT, 
    DT DATETIME 
    )"; 

這裏是我正在插入值:

mysqli_query ($con, "INSERT INTO alarms(Title, Description, DT) 
VALUES('eat', 'Agha loves eating', '2013-08-05 00:15:12')"); 

這裏是我的,而循環,打印出的值:

$result = mysqli_query($con,"SELECT * FROM alarms"); 
while ($row = mysqli_fetch_array($result)){ 
echo $row['alarmID'] . " <br> " . $row['Title'] . " <br> " . $row['Description'] . " <br> " . $row['DT']; 
} 

如何在防止重複的同時插入值?

+1

閱讀[PRIMARY KEY和UNIQUE索引限制](http://dev.mysql.com/doc/refman/5.6/en/constraint-primary-key.html) –

+0

你不想顯示重複或不想插入重複?如果顯示,然後看看DISTINCT在sql –

+0

對不起,我不想插入重複。 –

回答

1

我認爲插入值的代碼與打印它們的代碼一起?這意味着每次刷新時都會運行插入代碼,並再次插入值。除非必要,否則不應該運行插入代碼。

但是,爲了防止插入數據時出現重複,您需要在再次插入值之前進行檢查,或者您需要修改查詢以防止重複。閱讀這些,他們會有所幫助。

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html < - 如何編寫一個查詢插入新記錄,並在記錄已存在時回退更新。

http://dev.mysql.com/doc/refman/5.0/en/replace.html < - 相似的結果,不同的方法。

這些方法要求您將主鍵設置爲唯一鍵,並且主鍵的組件是插入查詢的一部分。如果這是不可能的,並且您的主鍵是分開的(例如自動增量),那麼您唯一的選擇是在再次創建它之前檢查該條目。

+0

我不得不打開這個問題。每次刷新頁面時,代碼都會再次運行並插入到表中。現在,具體而言,即使我刷新頁面,我如何避免重複? –

0

,如果你想忽略的DUP然後設置唯一鍵約束和主鍵,然後使用INSERT IGNORE

mysqli_query ($con, "INSERT IGNORE INTO alarms(Title, Description, DT) 
    VALUES('eat', 'Agha loves eating', '2013-08-05 00:15:12')"); 
0

我覺得你的問題是 - 單個mysql_inser()兩記中插入你的D B。 當頁面未正確重新加載時,會發生此問題。所以插入後報警詳細信息,重定向您的頁面正確,以便將沒有發佈數據和沒有插入請求。

相關問題