如果重复的mysql数据库

时间:2018-03-29 07:53:03

标签: php mysql pdo

我有xml值类别和子类别,我想将其插入数据库中。 这个代码每天都会在服务器检查xml文件上工作,如果有一些更改,如果它有更新mysql数据库。

我已经有了将记录从xml添加到mysql的代码,但是存在一些问题

  

执行文件时,它会在mysql中再次插入所有数据,而不是检查重复项并在记录不存在时进行更新

<?php

// URL is not real this is for example

$url = 'http://xml.com/category'; 
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);

$data = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($data);
$con = new PDO("mysql:host=localhost;dbname=main_data;charset=utf8", 'root', '');
foreach ($xml -> m as $row){
    $cat = $row->category;
    $subCat = $row->sub_category;
    $sql = $con->prepare("INSERT INTO cat (category, sub_category) VALUES (:cat, :subCat)");
    $sql->bindValue('cat', $cat);
    $sql->bindValue('subCat', $subCat);
    $sql->execute();
}

xml示例

<?xml version="1.0" encoding="utf-8"?>
<category>
    <m>
        <category>Cat 1</category>
        <sub_category>SubCat 1</sub_category>
    </m>

    <m>
        <category>Cat 1</category>
        <sub_category>SubCat 2</sub_category>
    </m>
    <m>
        <category>Cat 2</category>
        <sub_category>SubCat 3</sub_category>
    </m>
</category>

1 个答案:

答案 0 :(得分:2)

检查唯一性不是php的责任。它应该是MySQL,如果MySQL允许重复记录,你就有设计缺陷!更正您的表格设计,然后使用

INSERT INTO table(category, sub_category)
VALUES(:cat, :subCat)
ON DUPLICATE KEY UPDATE sub_category= values(sub_category); -- and so on

如果您不想更新,请使用

INSERT IGNORE INTO ... -- this will insert all rows that is not producing any error
相关问题