0

フォーラムを検索しても、探しているものを正確に見つけることができませんでした (重複して申し訳ありません) ...PHP は初めてですが、RSS フィードのアイテムをデータベース (MYSQL .. このコード (以下) が実行されるたびに、同じリンクで項目を更新する代わりに、同じ項目がデータベースに追加されます。IDフィールド(int)は主キーです...助けていただければ幸いです:

<?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');
         }


          ?>
4

3 に答える 3

1

あなたはON DUPLICATE KEY適切に使用していません。ID競合する可能性のある挿入ステートメントにフィールドを提供していないため、重複キーが発生する可能性はありません。

RSS フィードに固有のものを決定し、これを主キーにする必要があります。guid本当に真の GUID である場合、それは理想的です。それ以外の場合、使用linkは機能しますが、PK として使用するには長すぎることに気付くでしょう。

編集

IDデータとは関係がないため、重複のチェックには使用できません。を使用するlinkには、それを主キーにします。

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

PK の最大長は、InnoDB では 767 バイト、MyISAM では 1000 バイトであることに注意してください。列のエンコーディングによっては、1 文字あたり複数バイトを使用する場合があります。

次に、クエリをこれに変更して再試行する必要があります。

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';
于 2013-09-13T01:40:41.843 に答える
0

クエリによると、タイトル、リンク、説明、pubdate、guid からのプライマリ キーまたは一意のキーが必要です。これには、リンクまたは GUID のいずれかが最適だと思います。フィードでどのフィールドが一意になるかを確認する必要があります。

于 2013-09-13T01:40:34.267 に答える
0

新しい RSS をデータベースに保存されている既存の RSS と比較します。存在する場合は値を更新し、そうでない場合は新しい RSS を挿入します。

于 2013-09-13T01:35:36.557 に答える