Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql如果数据存在,则不要再次插入它_Php_Mysql - Fatal编程技术网

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

Php Mysql如果数据存在,则不要再次插入它,php,mysql,Php,Mysql,我使用下面的代码使用PHP curl函数从不同的网站获取数据。一切正常,但当网站将重新加载或刷新时,我会将重复数据获取到数据库中。 如果Mysql数据库中已经存在重复数据,那么基于下面的代码,是否有任何理由在重新加载时停止插入重复数据?我在谷歌上搜索这个问题,但没有得到任何有用的信息 if(isset($_POST['url'],$_POST['theme'])){ $db = new Mysqli("localhost" , "iamniloy_wp###" , "(5uSE6[3

我使用下面的代码使用PHP curl函数从不同的网站获取数据。一切正常,但当网站将重新加载或刷新时,我会将重复数据获取到数据库中。

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

    }

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

例如:

ALTER TABLE `twist_data` ADD UNIQUE INDEX `url` (`url`)
这样,您将无法在表中插入相同的
url

如果您需要
唯一
同时位于
url
主题
上,您可以使用:

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

有关详细信息,请参见。

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

例:


如果出于任何原因无法添加唯一索引,可以使用
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'
)

在插入查询中使用重复的
关键字。见:


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

用以下代码替换最后两个ligne:
$query=“从扭曲数据中选择*,其中url='$url';
$db->query($query);
如果($db->num_rows>0){
$query=“插入twist_数据(url,主题)值(“$url”,“$theme”)”;
$db->query($query);

}

您可以使用Try-Catch,只要忽略重复ID异常,前提是您有一个唯一的字段。如果数据使其重复,该怎么办?url、主题或两者都可以?创建一个唯一的索引,并且更改数据库还不算太晚。只有当您有一个唯一的索引时,
on replicate
才相关。已编辑。谢谢。:)你查过我7分钟前的答案了吗?:)(如果你只把索引设置为unique,我很肯定你的会出错。您还必须根据我的经验定义在这种情况下应该做什么。
查询(…)
将返回false,但这没关系。
限制1
?:-)@是谁放的!?我听说有一些地精在某处;-)谢谢@TimBiegeleisen。您还可以提到
INSERT IGNORE
语法。
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'
)