2017-02-16 114 views
0

我使用下面的代碼通過使用PHP捲曲函數從不同的網站獲取數據.everything工作正常,但當網站將重新加載或重新加載數據時,刷新。
duplicate data screenshot如果數據存在,然後不要再插入它Mysql

不存在有任何理由基於下面這段代碼停止對重載插入重複數據,如果在MySQL數據庫中已存在的數據?我在谷歌搜索這個問題,但沒有得到任何有用的信息。

if(isset($_POST['url'],$_POST['theme'])){ 

    $db = new Mysqli("localhost" , "iamniloy_wp###" , "(5uSE6[3OP" , "iamniloy_#@"); 

    $url = $db->real_escape_string($_POST['url']); 
    $theme = $db->real_escape_string($_POST['theme']); 


    $query = "INSERT INTO twist_data (url,theme) VALUES ('$url','$theme')"; 
    $db->query($query); 

    } 
+0

您可以使用一個嘗試捕捉,並忽略重複的ID例外,只要你有一個獨特的領域。 – ArtisticPhoenix

+0

數據如何使其重複?網址,主題,還是兩者? –

+1

創建一個UNIQUE索引,並不晚於ALTER您的db –

回答

0

您應該更改表的結構以在相關列上具有唯一索引。

例如:

ALTER TABLE `twist_data` ADD UNIQUE INDEX `url` (`url`) 

這種方式,您將無法在同一url插入到你的表。

如果您需要unique要上urltheme您可以同時使用:在MySQL Documentation

ALTER TABLE `twist_data` ADD UNIQUE INDEX `url_theme` (`url`, `theme`) 

更多信息。

+0

您可能還提到了'INSERT IGNORE'語法。 –

0

創建一個選擇計數查詢,您將在哪裏檢查數據是否存在,然後 作出if條件。如果它是真的,那麼不要插入,如果它沒有數據(假),插入一個查詢。

例:

Select count(*) from twist_data where url='".$url."'; 
1

如果您不能添加無論什麼原因的唯一索引,你可以使用EXISTS檢查已經存在的記錄:

INSERT INTO twist_data (url, theme) 
SELECT * FROM (SELECT '$url','$theme') AS tmp 
WHERE NOT EXISTS (
    SELECT * FROM twist_data WHERE url = '$url' AND theme = '$theme' 
) 
+0

'LIMIT 1'? :-) –

+0

@PaulSpiegel誰把那裏!? –

+0

我聽說過一些哥布林因此;-) –

0

使用ON DUPLICATE關鍵詞在你的插入查詢中。請參閱:INSERT ... ON DUPLICATE KEY (do nothing)

並將列的索引設置爲唯一。

+1

如果你有一個唯一的索引,'on duplicate'只與**相關。 – Dekel

+0

已修改。謝謝。 :) – Juned

+0

你從7分鐘前檢查我的答案嗎? :)(一票將不勝感激) – Dekel

0

與此代碼替換最後兩個LIGNE: $query = "select * from twist_data where url='$url'"; $db->query($query); if($db->num_rows>0){ $query = "INSERT INTO twist_data (url,theme) VALUES ('$url','$theme')"; $db->query($query); }

+0

我以前試過,但它不適合我:( –

相關問題