2017-02-16 122 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

我以前试过,但它不适合我:( –

相关问题