XML到MySQL - 数据更新(无重复)

时间:2015-12-13 10:07:13

标签: php mysql xml pdo

全文:我经常使用产品更新xml文件。我需要那个文件,但只有一些产品。所以现在我制作了脚本,它接受xml文件,将其数据发送到mysql,然后从它们制作另一个xml文件(+我为表中的每个产品添加了另一个参数,所以我有接口,我选择whitch产品将在新的xml中并且赢得了#)。 在那之前我几乎没有使用过php的经验,所以我花了很多时间,脚本看起来非常糟糕,但它确实有效。几乎。 我的实际问题: 当我尝试检查原始的xml文件并在MySQL中更新数据时,它工作正常,但它不仅仅添加新产品并更新旧产品,但它也会再次添加所有产品。我使用CRON自动更新,但现在我有超过50k的产品在表而不是几百。所以我需要编辑我的脚本,只有当他们的ITEM_ID不在数据库中时才添加新产品。我的实际代码看起来像这样:`

<?php 
$xml = simplexml_load_file("http://www.xxx.yyy/");
$db = new PDO("mysql:host=wm100.wedos.net;dbname=d38383_xml", "a38383_xml", "69sgvw9x");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

foreach ($xml->SHOPITEM as $item) {

    $dotazText = "INSERT INTO xml(ITEM_ID, PRODUCTNAME, DESCRIPTION, URL, IMGURL, PRICE_VAT, MANUFACTURER, CATEGORYTEXT, CATEGORY_FULLNAME, DELIVERY_DATE, VAL)
                    VALUES ('$item->ITEM_ID','$item->PRODUCTNAME','$item->DESCRIPTION', '$item->URL','$item->IMGURL', '$item->PRICE_VAT','$item->MANUFACTURER', '$item->CATEGORYTEXT','$item->CATEGORY_FULLNAME','$item->DELIVERY_DATE','$item->VAL')";
    $update = "UPDATE xml SET `PRODUCTNAME`='$item->PRODUCTNAME', `DESCRIPTION`='$item->DESCRIPTION', `IMGURL`='$item->IMGURL', `PRICE_VAT`='$item->PRICE_VAT', `MANUFACTURER`='$item->MANUFACTURER', `CATEGORYTEXT`='$item->CATEGORYTEXT', `CATEGORY_FULLNAME`='$item->CATEGORY_FULLNAME', `DELIVERY_DATE`='$item->DELIVERY_DATE', `VAL`='$item->VAL'   WHERE ITEM_ID='$item->ITEM_ID'";               
    try {
    $db->query($dotazText);
    $db->query($update);
    } catch (PDOException $e) {
    echo $e->getMessage();
    }

}
include ("out.php");







?>

` 非常感谢你帮助我。我确信互联网上有一些答案,但正如我所说 - 我没有PHP技能,所以我很难理解我在做什么。

1 个答案:

答案 0 :(得分:0)

如果您为ITEM_ID添加唯一索引或将其设为主键,则可以使用INSERT ... ON DUPLICATE,即(缩短,根据需要添加列)

INSERT INTO xml(ITEM_ID, PRODUCTNAME, DESCRIPTION)
    VALUES ('$item->ITEM_ID','$item->PRODUCTNAME','$item->DESCRIPTION')
ON DUPLICATE KEY UPDATE
    PRODUCTNAME=VALUES(PRODUCTNAME),
    DESCRIPTION=VALUES(DESCRIPTION);