-1

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

<?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 元素。

4

2 回答 2

2

最简单的方法是使用 MySQLreplace 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 keys,例如,replace into可能不是一个好主意,因为它删除和插入记录,将为相同的记录创建新的 PK id,从而导致 FK 约束问题。

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

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

于 2012-08-30T02:26:11.603 回答
1

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

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 />";

希望它会帮助你。快乐编码!

于 2012-08-30T11:27:36.310 回答