Używam następującego kodu php do ładowania danych z pliku xml do wstawienia w Mysql, chcę aktualizować ten kanał rss za każdym razem, gdy pojawiają się nowe artykuły na tej stronie.
<?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')");
}
}
?>
Jednak po załadowaniu tego skryptu ponownie wstawia on poprzednio dodane dane. Jak mogę po prostu zaktualizować nowe artykuły.
Myślę, że skrypt powinien dodawać nowe elementy, dopóki nie spełni ostatniego dodanego elementu w tabeli, porównując Pubdate.
2 odpowiedzi
Możesz także napisać dwa różne zapytania, jedno do usunięcia istniejących danych z tabel, a następnie trafić na zapytanie wstawiające. lub możesz użyć polecenia replace w komendzie mysql. robiłem to wcześniej w bardzo prosty sposób, patrz:
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 />";
Mam nadzieję, że ci to pomoże. szczęśliwego kodowania!
Najłatwiej to zrobić, używając polecenia MySQL replace into
REPLACE INTO table_name(column_name1,column_name2,…) VALUES(value1,value2,…)
Instrukcja MySQL REPLACE jest rozszerzeniem MySQL do standardu SQL. MySQL REPLACE działa jak instrukcja INSERT z następującymi regułami:
- Jeśli wstawiany rekord nie istnieje, MySQL REPLACE wstawi nowy rekord.
- Jeśli wstawiany rekord istnieje, MySQL REPLACE najpierw usunie stary rekord, a następnie wstawi nowy rekord z nowymi wartościami.
Zasadniczo wszystko, co musisz zrobić, to zamienić INSERT INTO
na REPLACE INTO
w instrukcji SQL.
Jeśli jednak masz auto-increment primary keys
, na przykład replace into
może nie być dobrym pomysłem, ponieważ usuwa i wstawia rekordy, nowe identyfikatory PK zostaną utworzone dla tych samych rekordów, co spowoduje problemy z ograniczeniami FK..
Inną opcją jest użycie INSERT ... ON DUPLICATE KEY UPDATE
, która ponownie sprawdzi duplikaty w unikalnych polach kluczy. Jeśli możesz mieć pewność, że data publikacji będzie unikalna dla każdego artykułu, ta składnia może zostać użyta zamiast replace into
Możesz też wybrać tradycyjną trasę, na której wykonujesz select from table where db_pubdate = rss_pubdate
, a jeśli nie ma pasujących rekordów, wykonujesz insert into table
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.