全文:我经常使用产品更新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技能,所以我很难理解我在做什么。
答案 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);