2013-09-13 4 views
0

При поиске в форуме я не смог найти то, что искал (извините, это дубликат) ... Я новичок в PHP, но я смог получить элементы rss-фида в базу данных (MYSQL) .. каждый раз, когда этот код (ниже) запускает, он добавляет те же элементы в базу данных, вместо того, чтобы обновлять элементы с той же ссылкой. Поле идентификатора (int) является первичным ключом ... оценить любую помощь:duplicate key update php не работает

<?php 

    $calendar = file_get_contents('feed.rss'); 
    $entries = new SimpleXMLElement($calendar); 
     foreach($entries->channel->item as $items){ 
     $title= $items->title; 
    $titlefield=mysql_real_escape_string($title); 
     $des=$items->description; 
     $desfield=mysql_real_escape_string($des); 

     $link=$items->link; 
     $linkfield=mysql_real_escape_string($link); 

     $pubdate=$items->pubDate; 
     $pubs=mysql_real_escape_string($pubdate); 

     $guid=$items->guid; 
     $guids=mysql_real_escape_string($guid); 

     $rss="INSERT INTO rss_feeds (title, link, description, pubdate, guid) VALUES ('$titlefield','$linkfield','$desfield','$pubs' ,'$guids')" 
." ON DUPLICATE KEY UPDATE title = '$titlefield', link = '$linkfield', description ='$desfield', pubdate ='$pubs', guid ='$guids'"; 

     $result=mysql_query($rss) or die('Error, insert query failed'); 
     } 


      ?> 
+0

ли 'link' установить в качестве уникального ключа в базе данных? – Jeemusu

ответ

1

Вы не используете ON DUPLICATE KEY должным образом. Нет возможности дублировать ключ, потому что вы не предоставляете поле ID в своем заявлении вставки, которое может конфликтовать.

Вам нужно решить что-то уникальное для RSS-канала и сделать это основным ключом. Если guid действительно является истинным GUID, это было бы идеально. В противном случае использование link может работать, но вы, вероятно, обнаружите, что его слишком долго использовать в качестве ПК.

Редактировать

ID не связана с данными, что делает невозможным использование для проверки дубликатов. Для того, чтобы использовать link, убедитесь, что первичный ключ:

ALTER TABLE rss_feeds DROP PRIMARY KEY, ADD PRIMARY KEY (link); 

Обратите внимание, что максимальная длина для ПК составляет 767 байт в InnoDB и 1000 в MyISAM. В зависимости от кодировки столбца он может использовать несколько байтов на символ.

Затем вы должны изменить свой запрос на это и повторить:

INSERT INTO rss_feeds (title, link, description, pubdate, guid) VALUES ('$titlefield','$linkfield','$desfield','$pubs','$guids') 
    ON DUPLICATE KEY UPDATE title = '$titlefield', description ='$desfield', pubdate ='$pubs', guid ='$guids'; 
+0

«link» и «ID» являются уникальными ... можете ли вы представить пример кодирования? Я не знаю, как изменить код ... новый и хромающий – 011289User

+0

Большое вам спасибо, я попробую это сейчас – 011289User

0

Сравните новый RSS с существующим RSS, хранящимся в базе данных. Если он существует, чем обновлять значения, в противном случае вставьте новый RSS.

0

В соответствии с вашим запросом у вас должен быть первичный или уникальный ключ от названия, ссылки, описания, публикации, руководства, и я думаю, что для вас это будет либо ссылка, либо руководство. Вы должны проверить, какое поле становится уникальным в фиде.

+0

Я сделал «ссылку» на первичный ключ, то же самое дублирующее действие происходит в базе данных. – 011289User

Смежные вопросы