我有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>
答案 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