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

f4t66c6m  于 2022-12-21  发布在  PHP
关注(0)|答案(1)|浏览(133)

整个故事:我经常用pruducts更新xml文件。我需要那个文件,但只对一些产品。所以现在我做了脚本,它接受xml文件,将其数据发送到mysql,然后从它们中制作另一个xml文件(+我在表中的每个产品中添加了另一个参数,这样我就有了一个界面,可以选择哪些产品会在新的XML中,哪些不会).在此之前,我几乎没有使用PHP的经验,所以我花了很多小时,脚本看起来真的很糟糕,但它工作。几乎。我的实际问题:当我尝试检查原始xml文件并更新MySQL中的数据时,它工作正常,但它不仅添加新产品和更新旧产品,而且还再次添加所有产品。我使用CRON自动更新,但现在我的表中有超过50 k的产品,而不是几百个。所以我需要编辑我的脚本,添加新产品时,只有他们的ITEM_ID是不是已经在数据库中。我的实际代码看起来如下:'

<?php 
$xml = simplexml_load_file("http://www.xxx.yyy/");
$db = new PDO("mysql:host=wm100.wedos.net;dbname=d38383_xml", "a38383_xml", "*****");
$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技能,所以我几乎不知道我在做什么。”

gzszwxb4

gzszwxb41#

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

相关问题