整个故事:我经常用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技能,所以我几乎不知道我在做什么。”
1条答案
按热度按时间gzszwxb41#
如果为
ITEM_ID
添加唯一索引或使其成为主键,则可以使用INSERT ... ON DUPLICATE,即(缩短,根据需要添加列)