从XML更新Mysql数据库

时间:2012-08-30 02:19:28

标签: php mysql xml simplexml

我正在使用以下php代码从xml文件加载数据以插入Mysql,我想在本网站上有新文章时更新此rss feed。

<?php
mysql_connect("localhost","root","");
mysql_select_db("rss") ;

$feeds = array('http://mywebsite.com/index.php?format=feed&type=rss');
foreach( $feeds as $feed ) {
$xml = simplexml_load_file($feed);

foreach($xml->channel->item as $item)
{
$date_format = "j-n-Y"; // 7-7-2008




 echo '<style type="text/css">.style1 { direction: rtl;</style><p class="style1">';
 echo $item->pubDate;  
 echo '<br><a href="'.$item->link.'" target="_blank">'.$item->title.'</a><br>';
 echo '<div>' . $item->description . '</div><br><br><br><hr><br>';
 echo '<div>' . $item->content . '</div><br><br><br>';             
 echo '</p>';




mysql_query("INSERT INTO rss_feeds (id, title, description, link, category, pubdate,  facebook_pub, website) 
VALUES (
    '', 
    '".mysql_real_escape_string($item->title)."', 
    '".mysql_real_escape_string($item->description=htmlspecialchars(trim($item->description)))."', 
    '".mysql_real_escape_string($item->link)."', 
    '".mysql_real_escape_string($item->category)."', 
    '".mysql_real_escape_string($item->pubDate)."',
    'No', 
    'almourassel.com')");    
    }
    }
    ?>

但是,当我加载此脚本时,它会重新插入以前添加的数据。我怎样才能更新新文章。

我认为脚本应该添加新项目,直到它通过比较Pubdate来满足表格中的las添加元素。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用MySQL replace into命令

REPLACE INTO table_name(column_name1,column_name2,…) VALUES(value1,value2,…)

MySQL REPLACE语句是SQL标准的MySQL扩展。 MySQL REPLACE的工作方式类似于INSERT语句,具有以下规则:

  • 如果插入的记录不存在,MySQL REPLACE将插入新记录。
  • 如果要插入的记录存在,MySQL REPLACE将首先删除旧记录,然后插入带有新值的新记录。

基本上你所要做的就是在SQL语句中用INSERT INTO替换REPLACE INTO

但是,如果您有auto-increment primary keysreplace into可能不是一个好主意,因为它会删除并插入记录,因此会为相同的记录创建新的PK ID,从而导致FK约束出现问题..

另一种选择是使用INSERT ... ON DUPLICATE KEY UPDATE这将再次检查唯一键字段的重复项。如果您可以确定pubdate对于每篇文章都是唯一的,则可以使用此语法代替replace into

或者您可以选择执行select from table where db_pubdate = rss_pubdate的传统路线,如果没有匹配的记录,则执行insert into table

答案 1 :(得分:1)

您还可以编写两个不同的查询,一个用于删除表的现有数据,然后点击您的插入查询。 或者你可以使用mysql的replace into命令。 我之前以一种非常简单的方式完成了这项工作,请参阅:

mysql_query("DELETE FROM `wp_property`") or die(mysql_error());   
echo "Old data deleted !: <br /><br />";
$xmls = simplexml_load_file('my_file_location.xml');
foreach($xmls->Property as $xml)
{
$ID = $xml->ID;  
$ManagementCompanyID = $xml->ManagementCompanyID;
$MarketingName = $xml->MarketingName;
}

$sql = "INSERT INTO `wp_property` SET`ID`='".mysql_real_escape_string(trim($ID))."',   `ManagementCompanyID`='".mysql_real_escape_string(trim($ManagementCompanyID))."', `MarketingName`='".mysql_real_escape_string(trim($MarketingName))."'";

if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}

}
echo "New Records added successfully ! <br /><br />";
希望它会对你有所帮助。 快乐的编码!