如何使用自动更新将此xml feed导入sql?

时间:2014-09-11 09:52:34

标签: php mysql xml

我有一点问题,我无法在互联网上找到任何结果。

我的老板从他的产品提供商处获得了xml,他让我将xml链接中的所有数据插入到mysql网站db。

所以我从这样开始:

#database
$sql= new MySQL();
//connect to db   
$host = 'localhost';   
$user = 'user';   
$pass = 'pass';   
$db = 'dbname';     

$sql = mysql_connect ($host, $user, $pass) or die("Error - Unable to Connect");     

mysql_select_db($db) or die("Error- Unable to find database");                     

// specify url of xml file   

$url = "thehttpofurlproducts";         

// get xml file contents   

$xml = simplexml_load_file($url);   

foreach ($xml->Items->Item as $item) {
    $query = "INSERT INTO products (id,code,info) VALUES ($item->prod_id, $item->prod_code,$item->prod_info)";
    $result = mysql_unbuffered_query($query) or die ("Error in query: $query. ".mysql_error());
}  
mysql_close($connection);

还有很多其他字段,他希望我导入sql db。 他希望实时运行,所以我使用cronjobs。但问题是如何实时更新产品。当我第二次运行时,它会给我一些重复键等错误。

xml是这样的,它不断更新:

<Message>
<EntityType>Products</EntityType>
<Items>
<Item>
<prod_id>235</prod_id>
<prod_code>xzq</prod_code>
<prod_name>Dogs</prod_name>
<prod_info><prod_info/>
<isstoc>false</isstoc>
<UM>UM</UM>
<VAT>20.00</VAT>
<prod_category>Puppies</prod_category>
<prod_subcategory>--</prod_subcategory>
<Onlineprice>0.00</Onlineprice>
<Stock>0.00</Stock>
<Weight/>
</Item>
</Items>
</MESSAGE>

1 个答案:

答案 0 :(得分:0)

看看MySQL's ON DUPLICATE KEY UPDATE clause。它允许您更新值,而不是插入具有相同值的新行。

在你的例子中,你可以做到

...
$query = "INSERT INTO products (id,code,info) VALUES ($item->prod_id, $item->prod_code,$item->prod_info) ON DUPLICATE KEY UPDATE code = $item->prod_code, info = $item->prod_info";
...

为了安全起见,我建议您在将查询附加到查询之前对其进行清理。