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