Mysql如果数据存在则不要再次插入

时间:2017-02-16 00:40:43

标签: php mysql

我使用下面的代码通过使用PHP curl函数从不同的网站获取数据。一切正常,但是当网站重新加载或刷新时,我的数据库中会出现重复的数据。
duplicate data screenshot

如果数据已经存在于Mysql数据库中,那么根据以下代码有没有为什么停止在重新加载时插入重复数据的原因?我在google上搜索此问题,但没有获得任何有用的信息。

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);

    }

5 个答案:

答案 0 :(得分: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'
)

答案 1 :(得分:0)

您应该更改表的结构,使其在相关列上具有唯一索引。

例如:

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

这样您就无法在表格中插入相同的url

如果您需要同时使用uniqueurl上的theme

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

MySQL Documentation

中的更多信息

答案 2 :(得分:0)

创建一个选择计数查询,在那里您将检查数据是否存在 做一个if条件。如果是,则不插入,如果没有数据(false),则插入查询。

例如:

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

答案 3 :(得分:0)

使用插入查询中的ON DUPLICATE关键字。请参阅:INSERT ... ON DUPLICATE KEY (do nothing)

并将列的索引设置为唯一。

答案 4 :(得分: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); }