使用ON DUPLICATE KEY UPDATE更新表中的错误

时间:2011-11-05 09:56:25

标签: php mysql

我在我的数据库中阅读并存储rss feed,我的要求是如果链接字段相同,则只在数据库中更新标题和说明。
 我正在使用ON DUPLICATE KEY UPDATE但在输入query.its后只插入数据库中的单个数据并失败并显示错误

我的代码是

 <?php
      include_once 'db.php';

         $homepage = file_get_contents('http://rss.cnn.com/rss/edition_us.rss');

          $movies = new SimpleXMLElement($homepage);
             foreach($movies->channel->item as $opt){
            $title= $opt->title;
            $tittle=mysql_real_escape_string($title);
            $link=$opt->link;
            $links=mysql_real_escape_string($link);
            $des=$opt->description;

        $dess=mysql_real_escape_string($des);

       "INSERT INTO store_feed (title, link, description) VALUES   ('$tittle','$links','$dess')";



       $sql="ON DUPLICATE KEY UPDATE title= '$tittle',description='$dess'";
      $result=mysql_query($sql) or die( mysql_error() );
        }

      ?>

和表结构是: -

 CREATE TABLE `test_om`.`store_feed` (
   `id` INT NOT NULL AUTO_INCREMENT ,
     `title` VARCHAR( 200 ) NOT NULL ,
     `link` VARCHAR( 200 ) NOT NULL ,
      `description` VARCHAR( 500 ) NOT NULL ,
    `feedburner` VARCHAR( 200 ) NOT NULL ,
    PRIMARY KEY ( `id` ) ,
     UNIQUE (
     UNIQUE KEY `link` (`link`)
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

并且错误是 重复输入'http://rss.cnn.com/~r/rss/edition_us/~3/Wl1V4JsNqDU/index.html'以获取关键'链接'

我在查询中做了一些更改,简而言之。

     <?php
     include_once 'db.php';//config file

     $homepage = file_get_contents('http://rss.cnn.com/rss/edition_us.rss');//link of rss feed page
      $movies = new SimpleXMLElement($homepage);

      foreach($movies->channel->item as $opt){ 

      $sql="INSERT INTO store_feed SET `title` = '".mysql_real_escape_string($opt- >title)."',
     `link`='".mysql_real_escape_string($opt->link)."',
      `description`='".mysql_real_escape_string($opt->description)."'"

     ."ON DUPLICATE KEY UPDATE `title`='".mysql_real_escape_string($opt->title).
      "',`description`='".mysql_real_escape_string($opt->description)."'";

    $result=mysql_query($sql) or die( mysql_error() );
    }
  ?>

它解决了我的问题......

2 个答案:

答案 0 :(得分:3)

INSERT ... ON DUPLICATE必须是一个查询:

$sql="INSERT INTO store_feed (title, link, description) VALUES ('$tittle','$links','$dess')"
    ." ON DUPLICATE KEY UPDATE title= '$tittle',description='$dess'";
$result=mysql_query($sql) or die( mysql_error() );

答案 1 :(得分:0)

您忘记更新导致冲突的link字段。