2012-10-23 49 views
1

我有這個PHP/MySQL的腳本添加註釋到我的DB:如何防止將重複條目添加到數據庫表中?

$SQL = "INSERT INTO blog_comments (article_id, author_name, comment, path, posted, status) "; 
$SQL .= "VALUES (:article_id, :name, :comment, :next_path, Now(), 'Live');"; 

$STH = $DBH->prepare($SQL); 
$STH->bindParam(':article_id', $article_id); 
$STH->bindParam(':name', $name); 
$STH->bindParam(':comment', $comment); 
$STH->bindParam(':next_path', $next_path); 
$STH->execute(); 

有什麼辦法來修改這一點,以便它不插入相同的[author_name][article_id][comment]這個表?我知道中的一列可能會在我的表中添加UNIQUE,但不確定是否有多列。

+1

當然上的article_id。不知道關於author_name - 雖然對於那些共享同一個名字的人來說很危險:John(Smith | Doe) – nickhar

+0

@nickhar:這是一個很好的觀點,謝謝。這只是爲了阻止某人刷新頁面併發布重複條目。也許我會使用SESSION_ID作爲唯一的用戶值... – ShadowStorm

+2

這裏有一個更好的解決方案:在用戶發佈後,重定向他們的瀏覽器。這樣他們不能刷新他們的帖子。問題解決了。 – Mike

回答

5

你可以添加一個UNIQUE約束多個列

CREATE TABLE 
(
..... 
CONSTRAINT tab_uq UNIQUE (author_name, comment) 
) 

或改變現有的表,

ALTER TABLE myTable ADD UNIQUE (author_name, comment); 
+1

呵呵,我從來不知道我能做到這一點!謝謝。 – ShadowStorm

+1

你可能會想要使用[UPDATE](https://dev.mysql.com/doc/refman/5.0/en/update.html)或IGNORE來捕捉任何可能的咒語並處理它們。 – noel

+0

@shakabra:另一個好點,謝謝。 – ShadowStorm

1

呼叫的那些列作爲複合主鍵.. 這樣一來,他們將有一個獨特的條目。

1

可以使多個字段

+0

不確定你正在使用的數據庫,但通常只是field1 + field2 + field3創建一個複合鍵 – Andrew

1

我想你可以檢查分貝的結果的唯一鍵插入數據

+0

這會導致額外的工作。 –

1

之前,你也可以檢查INSERT ... ON DUPLICATE KEY UPDATEdev.mysql.com